首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

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

2012-01-23 
关于ORACLE数据库中函数和存教过程的问题我是个ORACLE初学者,我是FUNCTION中编写了一个函数,函数的功能是

关于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 

热点排行