我有一个名为DEF的Oracle Package,其中一个名为ABC的函数接受1个字符串参数。 我可以直接在TOAD编辑器中知道如何调用这个函数ABC吗?
提前致谢。
CREATE OR REPLACE PACKAGE HPQ_IF.def AS
FUNCTION def(p_sql IN VARCHAR2)
RETURN VARCHAR2;
END def;
/
FUNCTION abc(p_sql IN VARCHAR2)
RETURN VARCHAR2
IS
j NUMBER;
BEGIN
dbms_output.put_line(p_sql);
RETURN 'Done';
END abc;
上一个错误(使用下面的第一个答案):
[Error] Execution (6: 31): ORA-06550: line 6, column 31:
PLS-00302: component 'abc' must be declared
ORA-06550: line 6, column 3:
PL/SQL: Statement ignored
答案 0 :(得分:4)
在TOAD SQL缓冲区中:
DECLARE
v_sql VARCHAR2(255);
v_return VARCHAR2(255);
BEGIN
v_sql := 'the string'; -- or get it from anywhere else
v_return := HPQ_IF.def.abc(v_sql);
dbms_output.put_line(v_return);
-- do anything else you want to do with the return value here...
END;
如果您不想对返回值执行任何操作,请显示以下信息:
SELECT HPQ_IF.def.abc('the string') FROM DUAL;
但是,对于要在SQL中调用的PL / SQL函数(SELECT,INSERT等),它必须没有某些副作用(即,它不能修改数据库中的某些类型的状态)。要在SELECT中作为列调用,它不能修改数据库(例如插入或更新),执行DDL或提交事务。
您也可以在模式浏览器中使用执行过程。
答案 1 :(得分:3)
函数返回一个值,因此你必须在某处返回结果。
您可以从SQL语句中调用该函数
SELECT def.abc( 'Some string' )
FROM dual;
或者您可以将结果返回到PL / sQL中的局部变量
DECLARE
l_result VARCHAR2(100);
BEGIN
l_result := def.abc( 'Some string' );
END;