2016-04-24 14 views
-4

http://i.stack.imgur.com/t2tMi.jpg複数の行は、このサブクエリこと、PLSQLのORA 01427

SELECT T.USER_ID 
    FROM USER_OTHER_PRIVILEGES T 
WHERE T.UOPM_ID = 17 
    AND T.PRIV_ID IN (719) ; 67 rows selected 

INSERT INTO USER_OTHER_PRIVILEGES (
    ID, PRIV_ID,UOPM_ID,USER_ID,ML_ID,PARENT_ID 
) VALUES (
    PRIV_USER_OTH_ID_SEQ.NEXTVAL, 
    1792, 
    17, 
    (SELECT T.USER_ID 
    FROM USER_OTHER_PRIVILEGES T 
      JOIN USERS U 
      ON U.ID = T.USER_ID 
    WHERE T.UOPM_ID = 17 
    AND T.PRIV_ID IN (719)), 
    NULL, 
    1 
) 
+3

あなたの質問は何ですか? –

+0

"USER_OTHER_PRIVILEGES"を追加するにはテーブル、67行ですか? – Berkay

+0

最初のクエリに対応する67行をシーケンス1792,17とともにuser_other_privilegesテーブルに挿入しますか? – cableload

答えて

1

エラー手段に挿入:

SELECT T.USER_ID 
    FROM USER_OTHER_PRIVILEGES T 
      JOIN USERS U 
      ON U.ID = T.USER_ID 
    WHERE T.UOPM_ID = 17 
    AND T.PRIV_ID IN (719) 

戻るつ以上の行。
このクエリを実行すると、少なくとも2つのユーザーIDが表示されます。 VALUE句

INSERTステートメントがテーブルに一つだけの行
を挿入することができ、それはVALUES句の各列に1つのだけ値を期待:あなたが多くの値を入力することができない

INSERT INTO table(col1, col2, col3) VALUES (val1, val2, val3) 

行の1列。例えば

このサブクエリは、3つの数値を返した場合:1,2,3を、あなたはこのように1行を挿入することはできません。

+------+---------+---------+---------+-------+-----------+ 
| ID | PRIV_ID | UOPM_ID | USER_ID | ML_ID | PARENT_ID | 
+------+---------+---------+---------+-------+-----------+ 
| 456 | 1792 |  17 | 1,2,3 | NULL |   1 | 
+------+---------+---------+---------+-------+-----------+ 

私はあなただけの1行を挿入したくないという思いが、
は、あなたの代わりにINSERT INTO .... subqueryバリアントを必要とする、あなたはINSERT INTO ... VALUES ...構文を使用することはできません。この場合、

+------+---------+---------+---------+-------+-----------+ 
| ID | PRIV_ID | UOPM_ID | USER_ID | ML_ID | PARENT_ID | 
+------+---------+---------+---------+-------+-----------+ 
| 456 | 1792 |  17 |  1 | NULL |   1 | 
+------+---------+---------+---------+-------+-----------+ 
| 457 | 1792 |  17 |  2 | NULL |   1 | 
+------+---------+---------+---------+-------+-----------+ 
| 458 | 1792 |  17 |  3 | NULL |   1 | 
+------+---------+---------+---------+-------+-----------+ 


このansweを参照してください:あなたはこのように、suqueryによって返される各エントリに対して1つの別個の行を挿入しようとしています詳細は、R: How can I insert values into a table, using a subquery with more than one result?

、このような場合のためのあなたのinsert文を指定できます

INSERT INTO USER_OTHER_PRIVILEGES (
    ID, PRIV_ID,UOPM_ID,USER_ID,ML_ID,PARENT_ID 
) 
SELECT 
    PRIV_USER_OTH_ID_SEQ.NEXTVAL, 
    1792, 
    17, 
    T.USER_ID, 
    NULL, 
    1 
FROM USER_OTHER_PRIVILEGES T 
JOIN USERS U 
ON U.ID = T.USER_ID 
WHERE T.UOPM_ID = 17 
    AND T.PRIV_ID IN (719) 
0

回答、ありがとう:)

DECLARE 

v_USER_ID INTEGER; 


BEGIN 
    FOR XYZ IN 
       (
       SELECT T.USER_ID 
       FROM USER_OTHER_PRIVILEGES T 
       JOIN USERS U 
       ON U.ID = T.USER_ID 
       WHERE T.UOPM_ID = 17 
       AND T.PRIV_ID IN (719) 
      ) 
    LOOP 
    v_USER_ID:= XYZ.USER_ID; 

       INSERT INTO USER_OTHER_PRIVILEGES 
       (ID, PRIV_ID,UOPM_ID,USER_ID,ML_ID,PARENT_ID) 
       VALUES 
       (PRIV_USER_OTH_ID_SEQ.NEXTVAL,1792, 17,v_USER_ID, NULL,1); 

       COMMIT; 

    END LOOP; 

END; 
関連する問題