0

CUR_AD1、CUR_AD1_C、CUR_AD_2と宣言された3つのカーソルがあります。それらに含まれるのは、正常に機能する3つの単なるselectステートメントからの結果です。

後で私は次のステートメントを持っています:

BEGIN

    FOR AD1_REC IN CUR_AD1 LOOP

      V_ORG_NAME := AD1_REC.ADDRESS_LINE1;


    IF V_ORG_NAME = AD1_REC.ADDRESS_LINE1 THEN
        INSERT INTO DSOPI_PERSON_ADDR_RULE 
        (CCTR_PERSON_ADDRESS_ID, CCTR_PERSON_ID, SRC_ADDRESS_LINE1, SRC_ADDRESS_LINE2, SRC_ADDRESS_LINE3, SRC_ADDRESS_LINE4, 
        ORG_NAME, DEPT_NAME, TGT_ADDRESS_LINE1, TGT_ADDRESS_LINE2, TGT_ADDRESS_LINE3, TGT_ADDRESS_LINE4, 
        STATE, CITY, COUNTRY_NAME, ZIP_CODE, EXTRACT_DATE) 
        VALUES
        (AD1_REC.CCTR_PERSON_ADDRESS_ID, AD1_REC.CCTR_PERSON_ID, AD1_REC.ADDRESS_LINE1, AD1_REC.ADDRESS_LINE2, AD1_REC.ADDRESS_LINE3, AD1_REC.ADDRESS_LINE4, 
         V_ORG_NAME, '', '', AD1_REC.ADDRESS_LINE2, AD1_REC.ADDRESS_LINE3, AD1_REC.ADDRESS_LINE4, 
         AD1_REC.STATE, AD1_REC.CITY, AD1_REC.COUNTRY_NAME, AD1_REC.ZIP_CODE, SYSDATE);

    ELSIF V_ORG_NAME = AD1_REC.ADDRESS_LINE2 THEN
      FOR AD2_REC IN CUR_AD2 LOOP

        INSERT INTO DSOPI_PERSON_ADDR_RULE 
        (CCTR_PERSON_ADDRESS_ID, CCTR_PERSON_ID, SRC_ADDRESS_LINE1, SRC_ADDRESS_LINE2, SRC_ADDRESS_LINE3, SRC_ADDRESS_LINE4, 
        ORG_NAME, DEPT_NAME, TGT_ADDRESS_LINE1, TGT_ADDRESS_LINE2, TGT_ADDRESS_LINE3, TGT_ADDRESS_LINE4,
        STATE, CITY, COUNTRY_NAME, ZIP_CODE, EXTRACT_DATE) 
        VALUES
        (AD2_REC.CCTR_PERSON_ADDRESS_ID, AD2_REC.CCTR_PERSON_ID, AD2_REC.ADDRESS_LINE1, AD2_REC.ADDRESS_LINE2, AD2_REC.ADDRESS_LINE3, AD2_REC.ADDRESS_LINE4, 
         AD2_REC.ADDRESS_LINE2, NULL, AD2_REC.TGT_ADDRESS_LINE1, NULL, AD2_REC.ADDRESS_LINE3, AD2_REC.ADDRESS_LINE4, 
         AD2_REC.STATE, AD2_REC.CITY, AD2_REC.COUNTRY_NAME, AD2_REC.ZIP_CODE, SYSDATE);
         END LOOP;
         END IF;

END LOOP;                
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR' || SQLERRM);
RAISE;    
END; 

本文をコンパイルすると、次のエラーが発生し続けます。

PL / SQL:SQL文は無視されますPLS-00302:コンポーネント'ZIP_CODE'を宣言する必要がありますPL/ SQL:ORA-00984:列はここでは許可されていません

テーブルには何の問題もありません。それは私が自分のコントロールステートメントをどのように置いているかと何か関係があると思います。どんな助けでも大歓迎です。

テーブルDSOPI_PERSON_ADDR_RULEのDDL

  CREATE TABLE "CALSEED_OWNER"."DSOPI_PERSON_ADDR_RULE" 
   (    "CCTR_PERSON_ADDRESS_ID" NUMBER(12,0), 
    "CCTR_PERSON_ID" NUMBER(12,0), 
    "SRC_ADDRESS_LINE1" VARCHAR2(100 BYTE), 
    "SRC_ADDRESS_LINE2" VARCHAR2(100 BYTE), 
    "SRC_ADDRESS_LINE3" VARCHAR2(100 BYTE), 
    "SRC_ADDRESS_LINE4" VARCHAR2(100 BYTE), 
    "ORG_NAME" VARCHAR2(100 BYTE), 
    "DEPT_NAME" VARCHAR2(100 BYTE), 
    "TGT_ADDRESS_LINE1" VARCHAR2(100 BYTE), 
    "TGT_ADDRESS_LINE2" VARCHAR2(100 BYTE), 
    "TGT_ADDRESS_LINE3" VARCHAR2(100 BYTE), 
    "TGT_ADDRESS_LINE4" VARCHAR2(100 BYTE), 
    "STATE" VARCHAR2(100 BYTE), 
    "CITY" VARCHAR2(100 BYTE), 
    "COUNTRY_NAME" VARCHAR2(100 BYTE), 
    "ZIP_CODE" VARCHAR2(100 BYTE), 
    "EXTRACT_DATE" DATE, 
    "STREET" VARCHAR2(100 BYTE), 
    "STREET_CONTD" VARCHAR2(100 BYTE)

CURSOR CUR_AD2 IS         
        SELECT CCTR_PERSON_ADDRESS_ID, 'AL2' AL,ADDRESS_LINE2 
        FROM STG_RT2_PERSON_ADDRESS WHERE UPPER(ADDRESS_LINE2) IN 
        ( SELECT UPPER(ORG_NAME) FROM STG_RT2_ORGANIZATION
        WHERE NOT REGEXP_LIKE(ORG_NAME, '[0-9]') 
        AND NOT (LOWER(ORG_NAME) LIKE 'unknown' OR LOWER(ORG_NAME) LIKE 'no address%'
        OR ORG_NAME ='-' OR ORG_NAME=' ')); 
4

2 に答える 2

2

デバッグの目的で使用できます

DBMS_UTILITY.format_error_backtrace;

カーソル内のすべてのエイリアス(テーブルだけでなく)が、アクセスしようとしている列と一致していることを確認してください。

FOR x IN SELECT zip_code zipCode FROM myTable LOOP
    dbms_output.put_line(x.zip_Code)
END LOOP;

xにzip_codeではなくzipCodeが含まれているため、例は壊れています。

ご提供いただいた情報では、これ以上のサポートを提供したり、テーブルの説明やカーソル宣言を投稿したり、コンパイル可能な例を作成したりすることはできません。

これは便利ですhttp://sqlfiddle.com/

編集

問題はカーソル宣言です

  SELECT
    CCTR_PERSON_ADDRESS_ID,
    'AL2' AL,
    ADDRESS_LINE2,
    ZIP_CODE -- ADD THIS FOR THE ZIP CODE, YOU NEED TO ADD ALL THE OTHER COLUMNS ASWELL...
 FROM
    STG_RT2_PERSON_ADDRESS
  WHERE
    UPPER(ADDRESS_LINE2) IN
    (
      SELECT
        UPPER(ORG_NAME)
      FROM
        STG_RT2_ORGANIZATION
      WHERE
        NOT REGEXP_LIKE(ORG_NAME, '[0-9]')
      AND NOT
        (
          LOWER(ORG_NAME) LIKE 'unknown'
        OR LOWER(ORG_NAME) LIKE 'no address%'
        OR ORG_NAME ='-'
        OR ORG_NAME =' '
        )
    ); 

すべてのCUR_AD_2は結果セットのレコードであるため、同じ数の列と名前があります。クエリでは3つの列しかありませんが、(郵便番号など)にない多くの列にアクセスしようとしています。カーソル; 必ずZIP_CODEと必要な他のすべての列を追加してください。または、INSERTステートメントからそれらを削除するだけです

于 2012-10-18T05:08:23.993 に答える
0

表のzip_codeスペルのmatchecs列名を確認してください

于 2012-10-18T04:12:46.393 に答える