2013-11-25 4 views
23

Я пытаюсь запустить эту хранимую процедуруКак запустить хранимую процедуру в oracle sql developer?

DECLARE 
    P_TICKER_SERIAL VARCHAR2(200); 
    P_SECTOR_CODE VARCHAR2(200); 
    P_SOURCE_ID  VARCHAR2(200); 
    P_COUNTRY_CODE VARCHAR2(200); 
    P_FILTER_TYPE NUMBER; 
    CUR_OUT   SYS_REFCURSOR; 
    dbUserTable  DBUSER%ROWTYPE; 
BEGIN 
    P_TICKER_SERIAL :='14232'; 
    P_SECTOR_CODE := '15'; 
    P_SOURCE_ID  := 'TDWL'; 
    P_COUNTRY_CODE := 'SA'; 
    P_FILTER_TYPE := 1; 

    PKG_name.GET_user(
    P_TICKER_SERIAL => P_TICKER_SERIAL, 
    P_SECTOR_CODE => P_SECTOR_CODE, 
    P_SOURCE_ID  => P_SOURCE_ID, 
    P_COUNTRY_CODE => P_COUNTRY_CODE, 
    P_FILTER_TYPE => P_FILTER_TYPE, 
    CUR_OUT   => CUR_OUT 
); 
    open CUR_OUT; 
    LOOP 
    FETCH CUR_OUT INTO dbUserTable; 
    dbms_output.put_line(dbUserTable.email); 
    END LOOP; 
    CLOSE CUR_OUT; 
END; 
/

Но это дает мне эту ошибку

Error report: 
ORA-06550: line 8, column 15: 
PLS-00201: identifier 'DBUSER' must be declared 
ORA-06550: line 8, column 15: 
PL/SQL: Item ignored 
ORA-06550: line 24, column 2: 
PLS-00382: expression is of wrong type 
ORA-06550: line 24, column 2: 
PL/SQL: SQL Statement ignored 
ORA-06550: line 26, column 24: 
PLS-00320: the declaration of the type of this expression is incomplete or malformed 
ORA-06550: line 26, column 5: 
PL/SQL: SQL Statement ignored 
ORA-06550: line 27, column 28: 
PLS-00320: the declaration of the type of this expression is incomplete or malformed 
ORA-06550: line 27, column 7: 
PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

Любой знает, что это неправильно? Спасибо.

+0

CUR_OUT представляют собой несколько строк, не являющихся одним значением. –

+0

1) Процедура GET_user, скорее всего, открывает курсор, нет необходимости открывать его снова (причина ошибки PLS-00382) - удалить открытую инструкцию CUR_OUT; 2) Вам понадобится выход из условия цикла выхода, если, например, CUR_OUT% notfound, если вы не хотите вешать свой сеанс навсегда. –

ответ

37

Попробуйте выполнить процедуру, как это,

var c refcursor; 
execute pkg_name.get_user('14232', '15', 'TDWL', 'SA', 1, :c); 
print c; 
+0

спасибо за ваш быстрый ответ, но он дал мне эту ошибку: Bind Variable «c» НЕ ЗАЯВЛЯЕТ анонимный блок завершен –

+1

@Samy Louize Hanna, перед выполнением proceudre вам нужно запустить 'var c refcursor'. Этот механизм предназначен для назначения значения переменной. – Dba

+0

Ошибка, начинающаяся со строки 3 в команде: выполнить pkg_name.get_user ('14232', '15', 'TDWL', 'SA', 1,: c) Сообщение об ошибке: ORA-00904: "TDWL": недействительный идентификатор ORA-06512: на "schema.PKG_name", строка 156 ORA-06512: в строке 1 00904. 00000 - "% S: неверный идентификатор" * Причина: * Действие: Строка 156 не относится к моей хранимой процедуре –

0

Рассмотрим вы создали процедуру, как показано ниже.

CREATE OR REPLACE PROCEDURE GET_FULL_NAME like 
(
    FIRST_NAME IN VARCHAR2, 
    LAST_NAME IN VARCHAR2, 
    FULL_NAME OUT VARCHAR2 
) IS 
BEGIN 
    FULL_NAME:= FIRST_NAME || ' ' || LAST_NAME; 
END GET_FULL_NAME; 

В Oracle SQL Developer эту процедуру можно выполнить двумя способами.

1. Использование SQL Worksheet

Создание SQL Worksheet и писать PL/SQL анонимный блок, как это и ударил f5

DECLARE 
    FULL_NAME Varchar2(50); 
BEGIN 
    GET_FULL_NAME('Foo', 'Bar', FULL_NAME); 
    Dbms_Output.Put_Line('Full name is: ' || FULL_NAME); 
END; 

2. С помощью графического интерфейса управления

  • Развернуть Процедуры

  • правой кнопкой мыши на procudure вы создали и нажмите Run

  • В всплывающем окне, заполнить параметры и нажмите OK .

Cheers!

Смежные вопросы