1

小さなpl/sqlスクリプトを作成しようとしていますが、助けが必要です。まず、project1、project2という2つのテーブルがあります。両方のテーブルには、cust_codeという列があります。

cust_codeの値はvarchar2タイプです。値は常に1(数値1、小数点)および8桁で始まります。例:1.10002332

プロジェクト1テーブルにデータをインポートするときに、最後の桁が0の場合、たとえば1.22321630の場合、最後のゼロは削除され、小数点を超えて7桁しかありません。その場合は1.2232163になります

書きたいスクリプトは、小数点以下7桁かどうかをチェックし、そのレコードをproject2テーブルに挿入します。これは私が思いついたものです

DECLARE

       CURSOR dif IS
            SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
            FROM project1
            WHERE CUST_CODE IN (SELECT CUST_CODE FROM CUST_ALL);

BEGIN

        FOR a in dif LOOP

            IF SUBSTR(a.CUST_CODE, 10)=null
            THEN
            INSERT INTO project2 (cust_code)
            VALUES(a.CUST_CODE);           
            END IF;
        END LOOP;
        commit;

END;

スクリプトはエラーなしで実行されますが、何も起こりません。substr関数で、NULL以外の値を選択すると、機能します。8桁目が抜けているかどうかを確認する方法がわかりません。

アサフ。

4

2 に答える 2

1

次の行が原因で、スクリプトが機能しません。

IF SUBSTR(a.CUST_CODE, 10)=null

plsqlでは<something> = null常にFALSEになります。あなたは書くべきです:

IF SUBSTR(a.CUST_CODE, 10) IS null

しかし、実際にはplsqlは必要ありません。1つのSQLコマンドで実行できます。

INSERT INTO project2 (cust_code)
SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
            FROM project1
            WHERE CUST_CODE IN (SELECT CUST_CODE FROM CUST_ALL)
              AND SUBSTR(a.CUST_CODE, 10) IS null;
于 2012-12-02T14:58:03.300 に答える
0

あなたの状態のためにこれを試してください:

IF LENGTH(a.CUST_CODE) = 10 AND SUBSTR(a.CUST_CODE,-1,10) = '0'

(長さが10で、最後の文字が0かどうかを確認してください)

于 2012-12-02T14:56:52.467 に答える