아래 PL / SQL을 실행 중입니다 ...
DECLARE
BEGIN
FOR i IN (select VALUE from REWARDS)
LOOP
insert into BT_CMS.T_REWARDS_TYPES
(ID, REWARD_LABEL, REWARD_VALUE, REWARD_METHOD, UPDATE_USER, UPDATE_DATE, PAYMENT_PROVIDER_ID, CREATE_DATE, COUNTRY_CODE_ID)
values
(BT_CMS.SEQ_REWARD_TYPE_ID.nextval, 'R' || i || ' Real Time', i, 'Airtime', 'DEVOPS-826', sysdate, 120, sysdate, 206);
END LOOP;
END;
... 아래 오류가 발생합니다 ...
ORA-06550: line 8, column 72:
PLS-00382: expression is of wrong type
ORA-06550: line 8, column 52:
PLS-00382: expression is of wrong type
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
나는 문제가 값으로 대체되는 것이 문제라고 확신하지만 정확히 문제가 무엇인지 모르겠습니다. i가 선택되는 REWARDS 테이블의 VALUE 컬럼은 data_type = VARCHAR2 (20 BYTE)입니다. 삽입하려는 REWARD_LABEL 열에는 data_type = VARCHAR2 (50 CHAR)가 있습니다.
루프 내에서 i
레코드의 (고유 한) 필드가 아닌 전체 레코드를 참조합니다. i.value
대신 사용해야 합니다 i
.
DECLARE
BEGIN
FOR i IN (SELECT VALUE FROM REWARDS)
LOOP
INSERT INTO BT_CMS.T_REWARDS_TYPES(
ID,
REWARD_LABEL,
REWARD_VALUE,
REWARD_METHOD,
UPDATE_USER,
UPDATE_DATE,
PAYMENT_PROVIDER_ID,
CREATE_DATE,
COUNTRY_CODE_ID
)
VALUES (
BT_CMS.SEQ_REWARD_TYPE_ID.NEXTVAL,
'R' || i.VALUE || ' Real Time',
i.VALUE,
'Airtime',
'DEVOPS-826',
SYSDATE,
120,
SYSDATE,
206
);
END LOOP;
END;
더 나은 방법은 커서를 반복하는 대신 단일 삽입 선택을 사용하는 것입니다. 예를 들면 :
INSERT INTO BT_CMS.T_REWARDS_TYPES(
ID,
REWARD_LABEL,
REWARD_VALUE,
REWARD_METHOD,
UPDATE_USER,
UPDATE_DATE,
PAYMENT_PROVIDER_ID,
CREATE_DATE,
COUNTRY_CODE_ID
)
SELECT BT_CMS.SEQ_REWARD_TYPE_ID.NEXTVAL,
'R' || r.VALUE || ' Real Time',
r.VALUE,
'Airtime',
'DEVOPS-826',
SYSDATE,
120,
SYSDATE,
206
FROM REWARDS r
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다