Oracle - problema al insertar dato en un bloque pl/sql

 
Vista:

problema al insertar dato en un bloque pl/sql

Publicado por benjamin (2 intervenciones) el 24/06/2015 13:58:36
TENGO UNA DUDA EL BLOQUE PL/SQL

EL QUE ESCRIBIRE SIRVE COMPLETAMENTE (ES UN EJEMPLO)

SIN EMBARGO AL AGREGAR LAS SENTENCIAS:




SELECT PK_DEPARTAMENT.NEXTVAL INTO P_DEPARTAMENT
FROM DUAL;

INSERT INTO DEPARTMENT_LIST VALUES(P_DEPARTAMENT,'FIN',' FINANZAS');





DENTRO DEL BLOQUE NO ARRANCA SEGUN YO ES PORQUE LAS TABLAS TODABIA NO SON CREADA COMO TAMBIEN LA SECUENCIA HASTA QUE LLEGUE EN EL END; PERO SI LO TIRO EN OTRO BLOQUE FUNCIONA CORRECTAMENTE Y EMPIESA A INGRESAR EL DATO SIN NINGUN PROBLEMA YA QUE FUERON CREADAS POR EL BLOQUE ANTERIOR MI CONSULTA ES SI EXISTE ALGUNA SENTENCIA QUE PERMITA REALIZAR UNA TAREA(EN ESTE CASO CREACION DE TABLAS Y FRECUENCIAS) MANDARLE A LA BASE DE DATO Y VOLVER PARA INGRESAR LOS DATO CON EL MISMO BLOQUE YA QUE EL SISTEMA NO ME LO PERMITE.




DECLARE

P_DEPARTAMENT NUMBER(5);




BEGIN




EXECUTE IMMEDIATE ' CREATE TABLE DEPARTMENT_LIST(
deptno NUMBER(5),
shortname VARCHAR2(6),
longname VARCHAR2(20))';





EXECUTE IMMEDIATE ' ALTER TABLE DEPARTMENT_LIST
ADD CONSTRAINT deptno_pk PRIMARY KEY(deptno)';








EXECUTE IMMEDIATE ' CREATE SEQUENCE PK_DEPARTAMENT
START WITH 10
INCREMENT BY 1';




END;

necesito que todo este en un bloque
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

problema al insertar dato en un bloque pl/sql

Publicado por Rafael (328 intervenciones) el 24/06/2015 14:49:09
Si te he entendido bien quieres esto???
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DECLARE P_DEPARTAMENT NUMBER (5);
BEGIN
	EXECUTE IMMEDIATE ' CREATE TABLE DEPARTMENT_LIST(
						deptno NUMBER(5),
						shortname VARCHAR2(6),
						longname VARCHAR2(20))';
 
	EXECUTE IMMEDIATE ' ALTER TABLE DEPARTMENT_LIST
						ADD CONSTRAINT deptno_pk PRIMARY KEY(deptno)';
 
	EXECUTE IMMEDIATE ' CREATE SEQUENCE PK_DEPARTAMENT
						START WITH 10
						INCREMENT BY 1';
 
	SELECT PK_DEPARTAMENT.NEXTVAL
	INTO P_DEPARTAMENT
	FROM DUAL;
 
	INSERT INTO DEPARTMENT_LIST
	VALUES (
		P_DEPARTAMENT
		,'FIN'
		,' FINANZAS'
		);
END;

O cuando llamas a un solo bloque a que te refieres ???
Luego que haras con la tabla la destruiras ???

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problema al insertar dato en un bloque pl/sql

Publicado por benjamin (2 intervenciones) el 24/06/2015 15:13:47
mi problema es que al ingresar dichas secuencia como tu lo realizaste sale este error



ORA-06550: line 15, column 9:
PL/SQL: ORA-02289: sequence does not exist
ORA-06550: line 15, column 2:
PL/SQL: SQL Statement ignored
ORA-06550: line 19, column 14:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 19, column 2:
PL/SQL: SQL Statement ignored

1. DECLARE P_DEPARTAMENT NUMBER (5);
2. BEGIN
3. EXECUTE IMMEDIATE ' CREATE TABLE DEPARTMENT_LIST(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

problema al insertar dato en un bloque pl/sql

Publicado por Rafael (328 intervenciones) el 25/06/2015 11:11:02
Ya es que aunque los comandos execute immediate te dejan crear estructuras de la Base de Datos estas no estan disponibles si no hasta el final del procedimiento (Bloque)

La opcion es esta:
1
2
3
4
5
6
7
8
9
DECLARE P_DEPARTAMENT NUMBER;
BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE DEPARTMENT_LIST( deptno NUMBER(5), shortname VARCHAR2(6), longname VARCHAR2(20))';
    EXECUTE IMMEDIATE 'ALTER TABLE DEPARTMENT_LIST ADD CONSTRAINT deptno_pk PRIMARY KEY(deptno)';
    EXECUTE IMMEDIATE 'CREATE SEQUENCE PK_DEPARTAMENT START WITH 10 INCREMENT BY 1';
    EXECUTE IMMEDIATE 'SELECT PK_DEPARTAMENT.NEXTVAL FROM DUAL' INTO P_DEPARTAMENT;
    EXECUTE IMMEDIATE 'INSERT INTO DEPARTMENT_LIST VALUES (:deptno, :shortname, :longname)'
    USING P_DEPARTAMENT,'FIN',' FINANZAS';
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar