Saya mencoba untuk menetapkan atau memberikan semua izin pengguna ke pengguna lain yang diberikan, 13053 tetapi menghadapi kesalahan Oracle ini, ORA-01427: single-row subquery returns more than one row dan saya tahu persis bagian mana dari pernyataan SQL saya yang ditampilkan di bawah ini yang mengembalikan kesalahan ini tetapi gagal menanganinya karena yang ingin saya capai adalah memberikan beberapa baris yang dikembalikan ke pengguna yang diberikan dengan id 13053.

Usaha saya

INSERT INTO userpermissions (
     userid,permissionid
) VALUES (
     13053,( SELECT permissionid
        FROM userpermissions
        WHERE userid = ( SELECT userid
                         FROM users
                         WHERE username = '200376'
                       )
      )
);

Ada bantuan?

Terima kasih sebelumnya.

0
CCC 5 Agustus 2019, 17:52

1 menjawab

Jawaban Terbaik

Penulisan ulang harus melakukan trik:

INSERT INTO USERPERMISSIONS(
  USERID,
  PERMISSIONID
)
 SELECT 13053 AS USERID,
        p.PERMISSIONID
   FROM USERPERMISSIONS p
  WHERE p.userid = (SELECT userid FROM users WHERE username = '200376');

Masalah dengan sisipan asli adalah bahwa Anda menggunakan sintaks sisipan satu baris ketika Anda benar-benar mencoba untuk menyisipkan satu set baris.

Menyertakan target userid sebagai literal adalah salah satu cara untuk membuat kumpulan baris terlihat seperti yang saya asumsikan Anda maksudkan.

1
Tad Harrison 6 Agustus 2019, 13:32