如何使用TOAD-ORACLE调用包DEF中定义的sql函数ABC
我有一个名为DEF的Oracle包,其中有一个名为ABC的函数,接受一个字符串参数。 我可以知道如何在TOAD Editor中直接调用这个函数ABC吗 提前谢谢如何使用TOAD-ORACLE调用包DEF中定义的sql函数ABC,oracle,function,plsql,package,Oracle,Function,Plsql,Package,我有一个名为DEF的Oracle包,其中有一个名为ABC的函数,接受一个字符串参数。 我可以知道如何在TOAD Editor中直接调用这个函数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 NU
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
在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中作为列调用,它不能修改数据库插入或更新,例如,执行DDL或提交事务
您也可以在架构浏览器中使用执行过程。函数返回一个值,因此您必须在某个地方返回结果 您可以从SQL语句调用该函数
SELECT def.abc( 'Some string' )
FROM dual;
也可以将结果返回到PL/sQL中的局部变量中
DECLARE
l_result VARCHAR2(100);
BEGIN
l_result := def.abc( 'Some string' );
END;
您好,谢谢您的回答,奇怪的是,它给了我[错误]执行6:31:ORA-06550:第6行,第31列:PLS-00302:组件“abc”必须声明为ORA-06550:第6行,第3列:PL/SQL:语句忽略发布def.abc的代码,请?abc在def包规格中可用吗?嗨,斯科特,我在包头和包体上方贴了一张帖子。请注意,我在测试中也使用了相同的模式HPQ_,如果根据您发布的内容,包def中没有公共函数abc,除非这是一个输入错误。@iwan我清理了语法并添加了更多的解释;请注意,因为它是一个函数,所以您必须返回一个值。您似乎已经更改了函数和包的名称。但我怀疑你犯了一个错误。函数应该被称为abc,不仅在主体中,而且在声明中也是如此。请张贴完整的包装标题和完整的包装正文。如果更改名称,则首先修复所有错误,以便头和正文都能成功编译。