PAQUETE DBMS_SQL. Oracle 10g II

Aquí os dejo algunos ejemplos de este :

– 1º Ejemplo de permisos ( usuario SYS)

 GRANT EXECUTE ON dbms_sql TO public;
REVOKE EXECUTE ON dbms_sql TO public;

– 2º Ejemplo : Ejecución de tipo de sentencia 1 (Creación de tabla)

BEGIN
 EXECUTE immediate ' Create table T2 (columna_1 number)';
END;

– 3º Ejemplo : Ejecución de tipo de sentencia 2 (Creación de tabla)

DECLARE
cadena varchar2(200):='Create table nueva (id_empleado number,salario number)';
cadena_incorrecta varchar2(200):='Create table nueva (c1 numb)'; 
valor_devuelto NUMBER;
vcursor NUMBER:=dbms_sql.open_cursor;
BEGIN
dbms_sql.parse (vcursor,cadena,dbms_sql.native);
-- Tb dbms_sql.v7
--dbms_sql.parse (vcursor,cadena_incorrecta,dbms_sql.native);
valor_devuelto := dbms_sql.EXECUTE(vcursor);
dbms_sql.close_cursor(vcursor);
END;

– 4º Ejemplo: Ejecución de tipo de sentencia 2 (Orden DML No select)

DECLARE
valor_devuelto NUMBER;
vcursor INTEGER:=dbms_sql.open_cursor;
BEGIN
dbms_sql.parse (vcursor,'update EMP set sal=sal*:v1 where id_empleado=:v2',
dbms_sql.native);
dbms_sql.bind_variable(vcursor,'v1',1.8);
dbms_sql.bind_variable(vcursor,'v2',7369);
valor_devuelto := dbms_sql.EXECUTE(vcursor);
-- Obtenemos el número de filas afectadas
dbms_output.put_line(valor_devuelto);
dbms_sql.close_cursor(vcursor);
END;

–5º Ejemplo: Ejecución de tipo de sentencia 2 (Orden DML NO select)

 DECLARE
valor_devuelto NUMBER;
vcursor INTEGER:=dbms_sql.open_cursor;
BEGIN
dbms_sql.parse (vcursor,'update nueva set salario=salario*:v1',dbms_sql.native);
dbms_sql.bind_variable(vcursor,'v1',1000);
valor_devuelto := dbms_sql.EXECUTE(vcursor);
-- Obtenemos el número de filas afectadas
dbms_output.put_line(valor_devuelto);
dbms_sql.close_cursor(vcursor);
END;

– 6º Ejemplo: Ejecución de tipo de sentencia 2 (Orden DQL)

 DECLARE
valor_devuelto NUMBER;
vcursor INTEGER:=dbms_sql.open_cursor;
v_id_empleado emp.empno%TYPE;
v_salario emp.sal%TYPE;
v_nombre emp.ename%TYPE;
BEGIN
dbms_sql.parse (vcursor,'select empno,sal,ename from emp where sal > 1000',
dbms_sql.native);
-- Definimos variables
dbms_sql.define_column(vcursor,1,v_id_empleado);
dbms_sql.define_column(vcursor,2,v_salario);
dbms_sql.define_column(vcursor,3,v_nombre,10);
 
-- Ejecutamos
valor_devuelto := dbms_sql.EXECUTE(vcursor);
loop
IF dbms_sql.fetch_rows (vcursor) > 0 THEN
-- Recojemos valores
dbms_sql.column_value (vcursor, 1, v_id_empleado);
dbms_sql.column_value (vcursor, 2, v_salario);
dbms_sql.column_value (vcursor, 3, v_nombre);
dbms_output.put_line(v_id_empleado);
dbms_output.put_line(v_salario);
dbms_output.put_line(v_nombre);
ELSE
exit;
END IF;
END loop;
dbms_sql.close_cursor(vcursor);
END;

Aclaración:

.NATIVE es una constante que toma el valor 7. Da igual si se pone esto o 7.

 DBMS_SQL.PARSE(vcursor, Cadena, DBMS_SQL.NATIVE);

Artículos relacionados