Как вызвать функцию sql ABC, определенную в пакете DEF, используя TOAD ORACLE - PullRequest
2 голосов
/ 13 ноября 2011

У меня есть Oracle Package с именем DEF, с 1 функцией внутри с именем ABC, которая принимает 1 строковый аргумент. Могу ли я узнать, как вызвать эту функцию ABC непосредственно в TOAD Editor?

Заранее спасибо.

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 ]

4 голосов
/ 13 ноября 2011

В буфере 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;

Однакодля функции PL / SQL, вызываемой в SQL (SELECT, INSERT и т. д.), она не должна иметь определенных побочных эффектов (т. е. она не может изменять определенные типы состояний в базе данных).Чтобы вызываться как столбец в SELECT, он не должен изменять базу данных (например, вставлять или обновлять), выполнять DDL или фиксировать транзакцию.


Вы также можете использовать процедуру выполнения изнутриБраузер схемы.

3 голосов
/ 13 ноября 2011

Функция возвращает значение, поэтому вам нужно где-то вернуть результат.

Вы можете вызвать функцию из оператора SQL

SELECT def.abc( 'Some string' )
  FROM dual;

Или вы можете вернуть результат в локальныйпеременная в PL / sQL

DECLARE
  l_result VARCHAR2(100);
BEGIN
  l_result := def.abc( 'Some string' );
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...