Scripts Capitulo11

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

---------------------------- SLIDE 5

Intentamos insertar un registro en la tabla DEPARTMENTS, pero lleva una cadena y la


variable es una cadena
Esta se parsea cada vez que se ejecuta.
-----------------------------

declare
v_cadena varchar2(120);
begin
v_cadena := 'insert into DEPARTMENTS(DEPARTMENT_ID, DEPARTMENT_NAME
,MANAGER_ID, LOCATION_ID) values(280,'depto demo',null,1700)';
execute immediate v_cadena;
commit;
end;

declare
v_cadena varchar2(120);
begin
v_cadena := "insert into DEPARTMENTS(DEPARTMENT_ID, DEPARTMENT_NAME
,MANAGER_ID, LOCATION_ID) values(280,'depto demo',null,1700)";
execute immediate v_cadena;
commit;
end;

declare
v_cadena varchar2(120);
begin
v_cadena := 'insert into DEPARTMENTS(DEPARTMENT_ID, DEPARTMENT_NAME
,MANAGER_ID, LOCATION_ID) values(280,'||''''||'depto demo'||''''||',null,1700)';
execute immediate v_cadena;
end;
/

xxxxxxxxxxxxxx
Intentamos insertar un registro en la tabla DEPARTMENTS, METODO 2 usando una
variable.
Esta solo es parseada una sola vez.

xxxxxxxxxxxxxx
declare
v_cadena varchar2(120);
v_dep number(3) := 280;
v_nam char(30) :='depto demo';
v_man number := null;
v_loc number(4) := 1700;
begin
v_cadena := 'insert into DEPARTMENTS(DEPARTMENT_ID, DEPARTMENT_NAME
,MANAGER_ID, LOCATION_ID) values(:b_dep,:b_nam,:b_man,:b_loc)';
execute immediate v_cadena using v_dep, v_nam, v_man, v_loc;
end;
/

xxxxxxxxxxxxxx
Consutamos registro insertado, METODO 3 usando una variable.
xxxxxxxxxxxxxx
set serveroutput on
declare
v_cadena varchar2(120);
v_dep number(3) := 280;
v_nam char(30);
v_man number(3);
v_loc number(4);
begin
v_cadena := 'select DEPARTMENT_NAME ,MANAGER_ID, LOCATION_ID from DEPARTMENTS
where department_id= :b_dep';
execute immediate v_cadena into v_nam, v_man, v_loc using v_dep;

dbms_output. put_line('Departamento : '|| v_nam);


dbms_output. put_line('Location : '|| v_loc);
dbms_output. put_line('Manager : '|| v_man);
end;
/

---------------------------- SLIDE 6

CREATE OR REPLACE PROCEDURE add_col(p_table_name VARCHAR2,p_col_spec VARCHAR2) IS


v_stmt VARCHAR2(100) := 'ALTER TABLE ' || p_table_name ||' ADD '||
p_col_spec;
BEGIN
EXECUTE IMMEDIATE v_stmt;
END;
/

To add a new column to a table, enter the following:

EXECUTE add_col('employee_names', 'salary number(8,2)');

---------------------------- SLIDE 8
CREATE FUNCTION annual_sal( p_emp_id NUMBER) RETURN NUMBER IS
v_plsql varchar2(200) :='DECLARE '||
' rec_emp employees%ROWTYPE; '||
'BEGIN '||
' rec_emp := get_emp(:empid); ' ||
' :res := rec_emp.salary * 12; ' ||
'END;';
v_result NUMBER;
BEGIN
EXECUTE IMMEDIATE v_plsql USING IN p_emp_id, OUT v_result;
RETURN v_result;
END;
/

EXECUTE DBMS_OUTPUT.PUT_LINE(annual_sal(100))

------------------------- SLIDE 9

CREATE PROCEDURE compile_plsql(p_name VARCHAR2,


p_plsql_type VARCHAR2, p_options VARCHAR2 := NULL) IS
v_stmt varchar2(200) := 'ALTER '|| p_plsql_type ||
' '|| p_name || ' COMPILE';
BEGIN
IF p_options IS NOT NULL THEN
v_stmt := v_stmt || ' ' || p_options;
END IF;
EXECUTE IMMEDIATE v_stmt;
END;
/

---------------------------- SLIDE 9 otro ejemplo.


CREATE FUNCTION get_emp( p_emp_id NUMBER ) RETURN employees%ROWTYPE IS
v_stmt VARCHAR2(200);
v_emprec employees%ROWTYPE;
BEGIN
v_stmt := 'SELECT * FROM employees ' ||'WHERE employee_id = :p_emp_id';
EXECUTE IMMEDIATE v_stmt INTO v_emprec USING p_emp_id ;
RETURN v_emprec;
END;
/

DECLARE
v_emprec employees%ROWTYPE := get_emp(100);
BEGIN
DBMS_OUTPUT.PUT_LINE('Emp: '|| v_emprec.last_name);
END;
/

---------------DBMS_SQL

---------------------------- SLIDE 8
CREATE OR REPLACE FUNCTION delete_all_rows(p_table_name VARCHAR2) RETURN NUMBER IS
v_cur_id INTEGER;
v_rows_del NUMBER;
BEGIN
v_cur_id := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(v_cur_id,'DELETE FROM '|| p_table_name, DBMS_SQL.NATIVE);
v_rows_del := DBMS_SQL.EXECUTE (v_cur_id);
DBMS_SQL.CLOSE_CURSOR(v_cur_id);
RETURN v_rows_del;
END;
/

CREATE TABLE temp_emp AS SELECT * FROM employees;


BEGIN
DBMS_OUTPUT.PUT_LINE('Rows Deleted: ' ||
delete_all_rows('temp_emp'));
END;
/

CREATE PROCEDURE insert_row (p_table_name VARCHAR2,p_id VARCHAR2, p_name VARCHAR2,


p_region NUMBER) IS
v_cur_id INTEGER;
v_stmt VARCHAR2(200);
v_rows_added NUMBER;
BEGIN
v_stmt := 'INSERT INTO '|| p_table_name ||
' VALUES (:cid, :cname, :rid)';
v_cur_id := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_cur_id, v_stmt, DBMS_SQL.NATIVE);


DBMS_SQL.BIND_VARIABLE(v_cur_id, ':cid', p_id);
DBMS_SQL.BIND_VARIABLE(v_cur_id, ':cname', p_name);
DBMS_SQL.BIND_VARIABLE(v_cur_id, ':rid', p_region);

v_rows_added := DBMS_SQL.EXECUTE(v_cur_id);

DBMS_SQL.CLOSE_CURSOR(v_cur_id);
DBMS_OUTPUT.PUT_LINE(v_rows_added||' row added');
END;
/

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy