You are on page 1of 2

create or replace function get_PK(nomeTabella VARCHAR2) return varchar2 IS elencoPK VARCHAR2(300) := ' '; v_tab varchar2(30); v_t_name varchar2(30);

v_c_name varchar2(30); v_type varchar2(30); v_len varchar2(10); v_prec varchar2(10); BEGIN v_tab := upper(nomeTabella);

select cons.constraint_name, colu.column_name, tab.data_type,tab.data_length, ta b.data_precision into v_t_name,v_c_name,v_type,v_len,v_prec from all_constraints cons join all_cons_columns colu on cons.constraint_name = colu.constraint_name join all_tab_columns tab on tab.column_name = colu.column _name where cons.constraint_type = 'P' and cons.table_name = v_tab and colu.table_name = tab.table_name group by cons.constraint_name, cons.table_name, colu.column_name, tab.data_type, tab.data_length, tab.data_precision ; elencoPK elencoPK elencoPK elencoPK elencoPK elencoPK elencoPK elencoPK elencoPK elencoPK := := := := := := := := := := rpad(elencoPK,length(elencoPK)+length(v_t_name),v_t_name); rpad(elencoPK,length(elencoPK)+1,','); rpad(elencoPK,length(elencoPK)+length(v_c_name),v_c_name); rpad(elencoPK,length(elencoPK)+1,','); rpad(elencoPK,length(elencoPK)+length(v_type),lower(v_type)); rpad(elencoPK,length(elencoPK)+1,'('); rpad(elencoPK,length(elencoPK)+length(v_len),v_len); rpad(elencoPK,length(elencoPK)+1,','); rpad(elencoPK,length(elencoPK)+length(v_prec),v_prec); rpad(elencoPK,length(elencoPK)+1,')');

return trim(elencoPK); END get_PK; / begin dbms_output.put_line(get_PK('departments')); end; / desc employees; select * from employees; desc all_constraints; select * from all_constraints where constraint_type like 'P'; desc all_cons_columns; select * from all_cons_columns where constraint_name like 'EMP%'; select * from all_constraints cons join all_cons_columns colu on cons.constraint_name = colu.constraint_name join all_tab_columns tab on tab.column_name = colu.column _name where cons.constraint_type = 'P' and cons.table_name = 'EMPLOYEES'; --group by cons.table_name, colu.column_name, tab.data_type;

desc employees; select * from all_tab_columns where table_name like 'EMP%'; select cons.constraint_name, cons.table_name, colu.column_name, tab.data_type,t ab.data_length, tab.data_precision from all_constraints cons join all_cons_columns colu on cons.constraint_name = colu.constraint_name join all_tab_columns tab on tab.column_name = colu.column _name where cons.constraint_type = 'P' and cons.table_name = 'JOBS' and colu.table_nam e = tab.table_name group by cons.constraint_name, cons.table_name, colu.column_name, tab.data_type, tab.data_length, tab.data_precision ; desc all_constraints; desc all_cons_columns; desc all_tab_columns; create or replace function get_employee (p_empl_no in employees.first_name%type) return employees%rowtype as l_cust_record employees%rowtype; begin select * into l_cust_record from employees where fist_name = p_empl_no; return(l_cust_record); end; / desc employees;

DECLARE TYPE EmpRec IS RECORD (last_name employees.last_name%TYPE, salary employees.salary%TYPE); emp_info EmpRec; emp_id NUMBER := 100; BEGIN UPDATE employees SET salary = salary * 1.1 WHERE salary > emp_id RETURNING last_name, salary INTO emp_info; DBMS_OUTPUT.PUT_LINE('Just gave a raise to ' || emp_info.last_name || ', who now makes ' || emp_info.salary); ROLLBACK; END; / select * from employees;

You might also like