如何使用TOAD ORACLE调用包DEF中定义的sql函数ABC

时间:2011-11-13 00:03:00

标签: oracle function plsql package

我有一个名为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

2 个答案:

答案 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;