Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用TOAD-ORACLE调用包DEF中定义的sql函数ABC_Oracle_Function_Plsql_Package - Fatal编程技术网

如何使用TOAD-ORACLE调用包DEF中定义的sql函数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

我有一个名为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 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,不仅在主体中,而且在声明中也是如此。请张贴完整的包装标题和完整的包装正文。如果更改名称,则首先修复所有错误,以便头和正文都能成功编译。