저장 프로 시저에 넣어야하는 간단한 선택 쿼리가 있습니다. 쿼리는 3 개의 매개 변수를 취하고 결과로 2 개의 열을 표시하며 그 중 하나는 집계입니다.
CREATE OR REPLACE PROCEDURE "B_SP_GET_TOTAL_CLOCKED_IN_TIME"
(
cv_1 IN OUT TYPES.cursorType,
p_PARENT_CLIENT_ID IN NUMBER DEFAULT 10000,
p_START_TIME IN NVARCHAR2,
p_END_TIME IN NVARCHAR2
)
AS
v_sql VARCHAR2(4000);
BEGIN
v_sql := 'SELECT b.CLIENT_NAME, ROUND(SUM((a.ENDTIME-a.STARTTIME)*24*60),2) TOTAL_CLOCKIN_TIME
FROM TIMESHEET a
INNER JOIN CLIENTS b ON a.CLIENT_ID = b.CLIENT_ID
INNER JOIN CLOCKACTIONS c ON c.ID = a.CLOCKACTIONID
WHERE a.STARTTIME > p_START_TIME AND a.ENDTIME < p_END_TIME AND b.PARENT_CLIENT_ID = p_PARENT_CLIENT_ID
GROUP BY b.CLIENT_NAME';
OPEN cv_1 FOR v_sql;
END;
저장 프로 시저를 실행했고 문제없이 컴파일되었습니다. 제대로 작동하는지 어떻게 확인합니까? 지금 어떻게 테스트합니까?
위 절차를 테스트하는 데 사용한 진술은 아래에서 찾을 수 있습니다.
execute B_SP_GET_TOTAL_CLOCKED_IN_TIME(10000,'04-01-2015 00:00:00','05-01-2015 00:00:00');
이것은 내가 얻은 오류였습니다.
Error starting at line : 1 in command - execute B_SP_GET_TOTAL_CLOCKED_IN_TIME(10000,'04-01-2015 00:00:00','05-01-2015 00:00:00')
Error report - ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'B_SP_GET_TOTAL_CLOCKED_IN_TIME'
ORA-06550: line 1, column 7: PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
동적 SQL을 사용할 필요가 없습니다 . 간단하게 사용 OPEN FOR SELECT
하고 SYS_REFCURSOR을 사용할 수 있습니다 .
예를 들면
SQL> CREATE OR REPLACE
2 PROCEDURE p_get_emp(
3 p_deptno IN emp.deptno%TYPE,
4 p_ref OUT SYS_REFCURSOR)
5 AS
6 BEGIN
7 OPEN p_ref FOR
8 SELECT ename,
9 empno,
10 deptno
11 FROM emp
12 WHERE deptno = p_deptno
13 ORDER BY empno;
14 END p_get_emp;
15 /
Procedure created.
SQL>
SQL> sho err
No errors.
SQL>
오류없이 생성 된 절차. 테스트 해 보겠습니다.
SQL> var p_ref refcursor
SQL>
SQL> EXEC p_get_emp (30, :p_ref);
PL/SQL procedure successfully completed.
SQL>
SQL> print p_ref
ENAME EMPNO DEPTNO
---------- ---------- ----------
ALLEN 7499 30
WARD 7521 30
MARTIN 7654 30
BLAKE 7698 30
TURNER 7844 30
JAMES 7900 30
6 rows selected.
SQL>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다