PLS-00103写入PLSQL块以比较2个标识表中的数据的错误
下面是我们编写的代码块,用于与相同的表进行比较,但下面是错误代码。有人能帮忙解决这个问题吗 代码: 错误:PLS-00103写入PLSQL块以比较2个标识表中的数据的错误,plsql,syntax-error,Plsql,Syntax Error,下面是我们编写的代码块,用于与相同的表进行比较,但下面是错误代码。有人能帮忙解决这个问题吗 代码: 错误: ORA-06550: line 3, column 34: PLS-00103: Encountered the symbol "," when expecting one of the following: := ; not null default character ORA-06550: line 36, column 9: PLS-00103: Encountered th
ORA-06550: line 3, column 34:
PLS-00103: Encountered the symbol "," when expecting one of the following:
:= ; not null default character
ORA-06550: line 36, column 9:
PLS-00103: Encountered the symbol "CURSOR" when expecting one of the following:
:= . ( , @ % ; not null range default external character
只是一些简单的语法错误。应该是这样的:
DROP TABLE ADJUSTMENT_DETAIL_RPT_COMPARE;
CREATE TABLE ADJUSTMENT_DETAIL_RPT_COMPARE
(
CUSTOMER_NO NUMBER (9),
CREDIT_REASON_S VARCHAR2 (10 BYTE),
AR_ACCOUNT_TYPE_S CHAR (1 BYTE),
L9_BILLING_TYPE_S VARCHAR2 (1 BYTE),
PRODUCT_S VARCHAR2 (16 BYTE),
CHARGE_CODE_S VARCHAR2 (25 BYTE),
BILL_SEQ_NO_S NUMBER (12),
AMOUNT_S NUMBER,
TAX_AMOUNT_S NUMBER,
REV_AMOUNT_S NUMBER,
REV_TAX_AMOUNT_S NUMBER,
CREDIT_REASON_T VARCHAR2 (10 BYTE),
AR_ACCOUNT_TYPE_T CHAR (1 BYTE),
L9_BILLING_TYPE_T VARCHAR2 (1 BYTE),
PRODUCT_T VARCHAR2 (16 BYTE),
CHARGE_CODE_T VARCHAR2 (25 BYTE),
BILL_SEQ_NO_T NUMBER (12),
AMOUNT_T NUMBER,
TAX_AMOUNT_T NUMBER,
REV_AMOUNT_T NUMBER,
REV_TAX_AMOUNT_T NUMBER,
CREDIT_DATE_S DATE,
CREDIT_DATE_T DATE,
L9_TELCO_COMP_CODE VARCHAR2 (4 BYTE),
AMOUNT_DIFF NUMBER,
TAX_AMOUNT_DIFF NUMBER,
REV_AMOUNT_DIFF NUMBER,
REV_TAX_AMOUNT_DIFF NUMBER
);
COMMIT;
DECLARE
v_CUSTOMER_NO_S NUMBER (9);
v_CREDIT_REASON_S VARCHAR2 (10 BYTE);
v_AR_ACCOUNT_TYPE_S CHAR (1 BYTE);
v_L9_BILLING_TYPE_S VARCHAR2 (1 BYTE);
v_PRODUCT_S VARCHAR2 (16 BYTE);
v_CHARGE_CODE_S VARCHAR2 (25 BYTE);
v_BILL_SEQ_NO_S NUMBER (12);
v_AMOUNT_S NUMBER;
v_TAX_AMOUNT_S NUMBER;
v_REV_AMOUNT_S NUMBER;
v_REV_TAX_AMOUNT_S NUMBER;
v_CREDIT_DATE_S DATE;
v_L9_TELCO_COMP_CODE_S VARCHAR2 (4 BYTE);
--v_CUSTOMER_NO_T NUMBER(9),
--v_CREDIT_REASON_T VARCHAR2(10 BYTE),
v_AR_ACCOUNT_TYPE_T CHAR (1 BYTE);
v_L9_BILLING_TYPE_T VARCHAR2 (1 BYTE);
v_PRODUCT_T VARCHAR2 (16 BYTE);
v_CHARGE_CODE_T VARCHAR2 (25 BYTE);
v_BILL_SEQ_NO_T NUMBER (12);
v_AMOUNT_T NUMBER;
v_TAX_AMOUNT_T NUMBER;
v_REV_AMOUNT_T NUMBER;
v_REV_TAX_AMOUNT_T NUMBER;
--v_CREDIT_DATE_T DATE,
--v_L9_TELCO_COMP_CODE_T VARCHAR2(4 BYTE),
v_AMOUNT_DIFF NUMBER;
v_TAX_AMOUNT_DIFF NUMBER;
v_REV_AMOUNT_DIFF NUMBER;
v_REV_TAX_AMOUNT_DIFF NUMBER;
--commit_counter NUMBER(9);
CURSOR c_EXIST_IN_BOTH
IS
(SELECT CUSTOMER_NO,
CREDIT_REASON,
CREDIT_DATE,
L9_TELCO_COMP_CODE
FROM adjustment_detail_rpt
INTERSECT
SELECT CUSTOMER_NO,
CREDIT_REASON,
CREDIT_DATE,
L9_TELCO_COMP_CODE
FROM adjustment_detail_rpt1);
BEGIN
--commit_counter := 0;
DBMS_OUTPUT.ENABLE (1000000);
DBMS_OUTPUT.PUT_LINE (CHR (1));
DBMS_OUTPUT.PUT_LINE ('Creating Compare Records...');
OPEN c_EXIST_IN_BOTH;
LOOP
FETCH c_EXIST_IN_BOTH
INTO
v_CUSTOMER_NO_S, v_CREDIT_REASON_S, v_CREDIT_DATE_S, v_L9_TELCO_COMP_CODE_S;
EXIT WHEN c_EXIST_IN_BOTH%NOTFOUND;
BEGIN
SELECT CREDIT_REASON,
AR_ACCOUNT_TYPE,
L9_BILLING_TYPE,
PRODUCT,
CHARGE_CODE,
BILL_SEQ_NO,
AMOUNT,
TAX_AMOUNT,
REV_AMOUNT,
REV_TAX_AMOUNT,
CREDIT_DATE,
L9_TELCO_COMP_CODE
INTO v_CREDIT_REASON_S,
v_AR_ACCOUNT_TYPE_S,
v_L9_BILLING_TYPE_S,
v_PRODUCT_S,
v_CHARGE_CODE_S,
v_BILL_SEQ_NO_S,
v_AMOUNT_S,
v_TAX_AMOUNT_S,
v_REV_AMOUNT_S,
v_REV_TAX_AMOUNT_S,
v_CREDIT_DATE_S,
v_L9_TELCO_COMP_CODE_S
FROM adjustment_detail_rpt1
WHERE CUSTOMER_NO = v_CUSTOMER_NO_S
AND L9_TELCO_COMP_CODE = v_L9_TELCO_COMP_CODE_S
AND CREDIT_REASON = v_L9_CREDIT_REASON_S
AND CREDIT_DATE = v_CREDIT_DATE_S;
END;
BEGIN
SELECT CREDIT_REASON,
AR_ACCOUNT_TYPE,
L9_BILLING_TYPE,
PRODUCT,
CHARGE_CODE,
BILL_SEQ_NO,
AMOUNT,
TAX_AMOUNT,
REV_AMOUNT,
REV_TAX_AMOUNT,
CREDIT_DATE,
L9_TELCO_COMP_CODE
INTO v_CREDIT_REASON_T,
v_AR_ACCOUNT_TYPE_T,
v_L9_BILLING_TYPE_T,
v_PRODUCT_T,
v_CHARGE_CODE_T,
v_BILL_SEQ_NO_T,
v_AMOUNT_T,
v_TAX_AMOUNT_T,
v_REV_AMOUNT_T,
v_REV_TAX_AMOUNT_T,
v_CREDIT_DATE_T,
v_L9_TELCO_COMP_CODE_S
FROM adjustment_detail_rpt
WHERE CUSTOMER_NO = v_CUSTOMER_NO_S
AND L9_TELCO_COMP_CODE = v_L9_TELCO_COMP_CODE_S
AND CREDIT_REASON = v_L9_CREDIT_REASON_S
AND CREDIT_DATE = v_CREDIT_DATE_S;
END;
INSERT INTO ADJUSTMENT_DETAIL_RPT_COMPARE
VALUES (v_CUSTOMER_NO_S,
v_CREDIT_REASON_S,
v_AR_ACCOUNT_TYPE_S,
v_L9_BILLING_TYPE_S,
v_PRODUCT_S,
v_CHARGE_CODE_S,
v_BILL_SEQ_NO_S,
v_AMOUNT_S,
v_TAX_AMOUNT_S,
v_REV_AMOUNT_S,
v_REV_TAX_AMOUNT_S,
v_CREDIT_REASON_T,
v_AR_ACCOUNT_TYPE_T,
v_L9_BILLING_TYPE_T,
v_PRODUCT_T,
v_CHARGE_CODE_T,
v_BILL_SEQ_NO_T,
v_AMOUNT_T,
v_TAX_AMOUNT_T,
v_REV_AMOUNT_T,
v_REV_TAX_AMOUNT_T,
v_CREDIT_DATE_S,
v_CREDIT_DATE_T,
v_L9_TELCO_COMP_CODE_S,
NULL,
NULL,
NULL,
NULL);
COMMIT;
END LOOP;
CLOSE c_EXIST_IN_BOTH;
UPDATE ADJUSTMENT_DETAIL_RPT_COMPARE
SET AMOUNT_DIFF = NVL (AMOUNT_S, 0) - NVL (AMOUNT_T, 0),
TAX_AMOUNT_DIFF = NVL (TAX_AMOUNT_S, 0) - NVL (TAX_AMOUNT_T, 0),
REV_AMOUNT_DIFF = NVL (REV_AMOUNT_S, 0) - NVL (REV_AMOUNT_T, 0),
REV_TAX_AMOUNT_DIFF =
NVL (REV_TAX_AMOUNT_S, 0) - NVL (REV_TAX_AMOUNT_T, 0);
COMMIT;
END;
/
抱歉,Stackoverflow不是调试工具。但是,您应该在每个变量声明后加上分号。另外,检查格式化代码。
DROP TABLE ADJUSTMENT_DETAIL_RPT_COMPARE;
CREATE TABLE ADJUSTMENT_DETAIL_RPT_COMPARE
(
CUSTOMER_NO NUMBER (9),
CREDIT_REASON_S VARCHAR2 (10 BYTE),
AR_ACCOUNT_TYPE_S CHAR (1 BYTE),
L9_BILLING_TYPE_S VARCHAR2 (1 BYTE),
PRODUCT_S VARCHAR2 (16 BYTE),
CHARGE_CODE_S VARCHAR2 (25 BYTE),
BILL_SEQ_NO_S NUMBER (12),
AMOUNT_S NUMBER,
TAX_AMOUNT_S NUMBER,
REV_AMOUNT_S NUMBER,
REV_TAX_AMOUNT_S NUMBER,
CREDIT_REASON_T VARCHAR2 (10 BYTE),
AR_ACCOUNT_TYPE_T CHAR (1 BYTE),
L9_BILLING_TYPE_T VARCHAR2 (1 BYTE),
PRODUCT_T VARCHAR2 (16 BYTE),
CHARGE_CODE_T VARCHAR2 (25 BYTE),
BILL_SEQ_NO_T NUMBER (12),
AMOUNT_T NUMBER,
TAX_AMOUNT_T NUMBER,
REV_AMOUNT_T NUMBER,
REV_TAX_AMOUNT_T NUMBER,
CREDIT_DATE_S DATE,
CREDIT_DATE_T DATE,
L9_TELCO_COMP_CODE VARCHAR2 (4 BYTE),
AMOUNT_DIFF NUMBER,
TAX_AMOUNT_DIFF NUMBER,
REV_AMOUNT_DIFF NUMBER,
REV_TAX_AMOUNT_DIFF NUMBER
);
COMMIT;
DECLARE
v_CUSTOMER_NO_S NUMBER (9);
v_CREDIT_REASON_S VARCHAR2 (10 BYTE);
v_AR_ACCOUNT_TYPE_S CHAR (1 BYTE);
v_L9_BILLING_TYPE_S VARCHAR2 (1 BYTE);
v_PRODUCT_S VARCHAR2 (16 BYTE);
v_CHARGE_CODE_S VARCHAR2 (25 BYTE);
v_BILL_SEQ_NO_S NUMBER (12);
v_AMOUNT_S NUMBER;
v_TAX_AMOUNT_S NUMBER;
v_REV_AMOUNT_S NUMBER;
v_REV_TAX_AMOUNT_S NUMBER;
v_CREDIT_DATE_S DATE;
v_L9_TELCO_COMP_CODE_S VARCHAR2 (4 BYTE);
--v_CUSTOMER_NO_T NUMBER(9),
--v_CREDIT_REASON_T VARCHAR2(10 BYTE),
v_AR_ACCOUNT_TYPE_T CHAR (1 BYTE);
v_L9_BILLING_TYPE_T VARCHAR2 (1 BYTE);
v_PRODUCT_T VARCHAR2 (16 BYTE);
v_CHARGE_CODE_T VARCHAR2 (25 BYTE);
v_BILL_SEQ_NO_T NUMBER (12);
v_AMOUNT_T NUMBER;
v_TAX_AMOUNT_T NUMBER;
v_REV_AMOUNT_T NUMBER;
v_REV_TAX_AMOUNT_T NUMBER;
--v_CREDIT_DATE_T DATE,
--v_L9_TELCO_COMP_CODE_T VARCHAR2(4 BYTE),
v_AMOUNT_DIFF NUMBER;
v_TAX_AMOUNT_DIFF NUMBER;
v_REV_AMOUNT_DIFF NUMBER;
v_REV_TAX_AMOUNT_DIFF NUMBER;
--commit_counter NUMBER(9);
CURSOR c_EXIST_IN_BOTH
IS
(SELECT CUSTOMER_NO,
CREDIT_REASON,
CREDIT_DATE,
L9_TELCO_COMP_CODE
FROM adjustment_detail_rpt
INTERSECT
SELECT CUSTOMER_NO,
CREDIT_REASON,
CREDIT_DATE,
L9_TELCO_COMP_CODE
FROM adjustment_detail_rpt1);
BEGIN
--commit_counter := 0;
DBMS_OUTPUT.ENABLE (1000000);
DBMS_OUTPUT.PUT_LINE (CHR (1));
DBMS_OUTPUT.PUT_LINE ('Creating Compare Records...');
OPEN c_EXIST_IN_BOTH;
LOOP
FETCH c_EXIST_IN_BOTH
INTO
v_CUSTOMER_NO_S, v_CREDIT_REASON_S, v_CREDIT_DATE_S, v_L9_TELCO_COMP_CODE_S;
EXIT WHEN c_EXIST_IN_BOTH%NOTFOUND;
BEGIN
SELECT CREDIT_REASON,
AR_ACCOUNT_TYPE,
L9_BILLING_TYPE,
PRODUCT,
CHARGE_CODE,
BILL_SEQ_NO,
AMOUNT,
TAX_AMOUNT,
REV_AMOUNT,
REV_TAX_AMOUNT,
CREDIT_DATE,
L9_TELCO_COMP_CODE
INTO v_CREDIT_REASON_S,
v_AR_ACCOUNT_TYPE_S,
v_L9_BILLING_TYPE_S,
v_PRODUCT_S,
v_CHARGE_CODE_S,
v_BILL_SEQ_NO_S,
v_AMOUNT_S,
v_TAX_AMOUNT_S,
v_REV_AMOUNT_S,
v_REV_TAX_AMOUNT_S,
v_CREDIT_DATE_S,
v_L9_TELCO_COMP_CODE_S
FROM adjustment_detail_rpt1
WHERE CUSTOMER_NO = v_CUSTOMER_NO_S
AND L9_TELCO_COMP_CODE = v_L9_TELCO_COMP_CODE_S
AND CREDIT_REASON = v_L9_CREDIT_REASON_S
AND CREDIT_DATE = v_CREDIT_DATE_S;
END;
BEGIN
SELECT CREDIT_REASON,
AR_ACCOUNT_TYPE,
L9_BILLING_TYPE,
PRODUCT,
CHARGE_CODE,
BILL_SEQ_NO,
AMOUNT,
TAX_AMOUNT,
REV_AMOUNT,
REV_TAX_AMOUNT,
CREDIT_DATE,
L9_TELCO_COMP_CODE
INTO v_CREDIT_REASON_T,
v_AR_ACCOUNT_TYPE_T,
v_L9_BILLING_TYPE_T,
v_PRODUCT_T,
v_CHARGE_CODE_T,
v_BILL_SEQ_NO_T,
v_AMOUNT_T,
v_TAX_AMOUNT_T,
v_REV_AMOUNT_T,
v_REV_TAX_AMOUNT_T,
v_CREDIT_DATE_T,
v_L9_TELCO_COMP_CODE_S
FROM adjustment_detail_rpt
WHERE CUSTOMER_NO = v_CUSTOMER_NO_S
AND L9_TELCO_COMP_CODE = v_L9_TELCO_COMP_CODE_S
AND CREDIT_REASON = v_L9_CREDIT_REASON_S
AND CREDIT_DATE = v_CREDIT_DATE_S;
END;
INSERT INTO ADJUSTMENT_DETAIL_RPT_COMPARE
VALUES (v_CUSTOMER_NO_S,
v_CREDIT_REASON_S,
v_AR_ACCOUNT_TYPE_S,
v_L9_BILLING_TYPE_S,
v_PRODUCT_S,
v_CHARGE_CODE_S,
v_BILL_SEQ_NO_S,
v_AMOUNT_S,
v_TAX_AMOUNT_S,
v_REV_AMOUNT_S,
v_REV_TAX_AMOUNT_S,
v_CREDIT_REASON_T,
v_AR_ACCOUNT_TYPE_T,
v_L9_BILLING_TYPE_T,
v_PRODUCT_T,
v_CHARGE_CODE_T,
v_BILL_SEQ_NO_T,
v_AMOUNT_T,
v_TAX_AMOUNT_T,
v_REV_AMOUNT_T,
v_REV_TAX_AMOUNT_T,
v_CREDIT_DATE_S,
v_CREDIT_DATE_T,
v_L9_TELCO_COMP_CODE_S,
NULL,
NULL,
NULL,
NULL);
COMMIT;
END LOOP;
CLOSE c_EXIST_IN_BOTH;
UPDATE ADJUSTMENT_DETAIL_RPT_COMPARE
SET AMOUNT_DIFF = NVL (AMOUNT_S, 0) - NVL (AMOUNT_T, 0),
TAX_AMOUNT_DIFF = NVL (TAX_AMOUNT_S, 0) - NVL (TAX_AMOUNT_T, 0),
REV_AMOUNT_DIFF = NVL (REV_AMOUNT_S, 0) - NVL (REV_AMOUNT_T, 0),
REV_TAX_AMOUNT_DIFF =
NVL (REV_TAX_AMOUNT_S, 0) - NVL (REV_TAX_AMOUNT_T, 0);
COMMIT;
END;
/