Как выполнить процедуру из SQL Developer? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть процедура хранения, как показано ниже, и как выполнить ее из SQL Developer?

PROCEDURE CFR.GET_ALL_ERROR_HISTORY
Argument Name  Type       In/Out Default? 
-------------- ---------- ------ -------- 
T1_CURSOR      REF CURSOR OUT             
P_QUERY_TYPE   NUMBER     IN              
P_DATE_START   DATE       IN     DEFAULT  
P_DATE_END     DATE       IN     DEFAULT  
P_COMP_NUMBER   NUMBER     IN     DEFAULT  
P_COMP_GROUP_ID NUMBER     IN     DEFAULT  

При запуске моего кода в Visual Studio

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GET_ALL_ERROR_HISTORY'
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GET_ALL_ERROR_HISTORY'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Мой код VS

    Dim oracleParameter(3) As OracleParameter
    oracleParameter(0) = New OracleParameter()
    oracleParameter(1) = New OracleParameter()
    oracleParameter(2) = New OracleParameter()
    oracleParameter(3) = New OracleParameter()

    oracleParameter(0) = cmd.Parameters.Add("T1_Cursor", dbType:=Oracle.ManagedDataAccess.Client.OracleDbType.RefCursor, ParameterDirection.Output)
    oracleParameter(1) = cmd.Parameters.Add("p_Date_Start", dbType:=Oracle.ManagedDataAccess.Client.OracleDbType.Date, val:=dteStart, ParameterDirection.Input)
    oracleParameter(2) = cmd.Parameters.Add("p_Date_End", dbType:=Oracle.ManagedDataAccess.Client.OracleDbType.Date, val:=dteEnd, ParameterDirection.Input)
    oracleParameter(3) = cmd.Parameters.Add("p_Query_Type", dbType:=Oracle.ManagedDataAccess.Client.OracleDbType.Decimal, val:=intQueryType, ParameterDirection.Input)

Я новичок в процедуре, и если вы можете подсказать мне, как решить эту проблему. Я могу решить все остальное самостоятельно

1 Ответ

1 голос
/ 06 февраля 2020

Есть способ кода.

В SQL Worksheet:

begin
 CFR.GET_ALL_ERROR_HISTORY(1, sysdate, sysdate+1, 1, 2);
end;
/

Обратите внимание, что вам нужно объявить локальную переменную sys refcursor и указать ее в Если вы хотите перехватить значение, вызовите команду PRINT, чтобы напечатать вывод .

. Это не лучшая практика, поскольку порядок параметров определяет, какое значение назначено. какой вход ... лучше использовать именованную запись в вашем вызове, так что похоже на

DECLARE
  P_EMP_ID NUMBER;
  P_START_DATE DATE;
  P_END_DATE DATE;
  P_JOB_ID VARCHAR2(10);
  P_DEPARTMENT_ID NUMBER;
BEGIN
  P_EMP_ID := 1;
  P_START_DATE := sysdate-365;
  P_END_DATE := sysdate;
  P_JOB_ID := 'SALES';
  P_DEPARTMENT_ID := 101;

  ADD_JOB_HISTORY(
    P_EMP_ID => P_EMP_ID,
    P_START_DATE => P_START_DATE,
    P_END_DATE => P_END_DATE,
    P_JOB_ID => P_JOB_ID,
    P_DEPARTMENT_ID => P_DEPARTMENT_ID
  );
END;
/

или

EXEC CFR.GET_ALL_ERROR_HISTORY(1,...)

И есть способ GUI.

Откройте процедуру из дерева и нажмите кнопку «Выполнить». Хорошо, что мы возьмем этот рефкурсор OUT и покажем вам результаты.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...