当前位置: 代码迷 >> Oracle管理 >> 关于ORACLE数据库中函数和存教过程的有关问题
  详细解决方案

关于ORACLE数据库中函数和存教过程的有关问题

热度:48   发布时间:2016-04-24 05:53:29.0
关于ORACLE数据库中函数和存教过程的问题
我是个ORACLE初学者,我是FUNCTION中编写了一个函数,函数的功能是返回一个动态SQL语句,现在问题是怎样才能在存储过程中调用这个函数呢,有代码麻烦给参考下,谢谢。

------解决方案--------------------
SQL code
CREATE OR REPLACE FUNCTION get_sql(p_table VARCHAR2) RETURN VARCHAR2 ISl_str VARCHAR2(1000);BEGIN l_str:='select ename from '||p_table; RETURN l_str;END;/CREATE OR REPLACE PROCEDURE proc_test(p_table VARCHAR2)  ISl_str VARCHAR2(1000);BEGIN  l_str:=get_sql(p_table);  dbms_output.put_line(l_str);END;/BEGIN proc_test('scott.emp');END;/
------解决方案--------------------
SQL code
SQL> create or replace function f1  2  return  nvarchar2  3  is  4  begin  5    return 'select * from a';  6  end;  7  /Function createdSQL> SQL> create or replace procedure p1  2  as  3   strsql nvarchar2(200);  4  begin  5    select f1 into strsql from dual;  6    dbms_output.put_line(strsql);  7  end;  8  /Procedure createdSQL> set serveroutput on;SQL> exec p1;select * from aPL/SQL procedure successfully completedSQL>
------解决方案--------------------
SQL code
CREATE OR REPLACE FUNCTION get_sql(p_table VARCHAR2) RETURN VARCHAR2 ISl_str VARCHAR2(1000);BEGIN l_str:='select ename from '||p_table; RETURN l_str;END;/CREATE OR REPLACE PROCEDURE proc_test(p_table VARCHAR2,p_out OUT Sys_Refcursor)  ISl_str VARCHAR2(1000);BEGIN  l_str:=get_sql(p_table);  dbms_output.put_line(l_str);  OPEN p_out FOR l_str;END;/DECLARE l_c SYS_REFCURSOR; l_v VARCHAR2(100);BEGIN proc_test('scott.emp',l_c); LOOP   FETCH l_c INTO l_v;   dbms_output.put_line(l_v);   EXIT WHEN l_c%NOTFOUND;  END LOOP;END;/输出:select ename from scott.empSMITHALLENWARDJONESMARTINBLAKECLARKSCOTTKINGTURNERADAMSJAMESFORDMILLERMILLER
  相关解决方案