Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana saya bisa membuat fungsi untuk mengembalikan nama kolom kendala?

Anda dapat menggunakan SYS_REFCURSOR bukan tipe data internal standar seperti VARCHAR2 seperti dalam kasus Anda agar dapat mengembalikan beberapa baris. Pernyataan SELECT dengan Klausa INTO tidak dapat mengembalikan beberapa baris, dan pesan kesalahan saat ini (ORA-01422 ) lempar.

Jadi, buat fungsi tersimpan yang berisi SYS_REFCURSOR dulu :

SQL> CREATE OR REPLACE FUNCTION GET_CONSTRAINT_COLUMNS(iTableName      IN VARCHAR2,
                                                       iConstraintName IN VARCHAR2)
                         RETURN SYS_REFCURSOR AS
  wkeys SYS_REFCURSOR;
  v_sql VARCHAR2(32767);
BEGIN

  v_sql := 'SELECT column_name
              FROM user_cons_columns
             WHERE constraint_name = :ic
               AND table_name = :it';

  OPEN wkeys FOR v_sql USING iconstraintname, iTableName;
  RETURN wkeys;
END;
/

lalu panggil dari konsol Pengembang SQL sebagai

SQL> DECLARE
    wConsumable SYS_REFCURSOR;
BEGIN
   :wConsumable := GET_CONSTRAINT_COLUMNS('PRODUCTS',  'PRODUCTSPK');
END;
/

SQL> PRINT wConsumable ;
  • SQL pertama (disiapkan untuk CURSOR Extract_KEY ) berlebihan;
  • Tidak ada perbedaan antara dua SELECT pernyataan dalam LOOP ,btw LOOP tidak diperlukan dengan menggunakan kasus saat ini;
  • Perintah PRINT dapat digunakan sebagai pengganti DBMS_OUTPUT.PUT_LINE untuk mengembalikan hasil SYS_REFCURSOR .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang dimaksud dengan pendahuluan di Oracle?

  2. Bagaimana cara mengambil semua anak rekursif dari baris induk di Oracle SQL?

  3. Bagaimana cara menghapus nilai tertentu dari string yang dipisahkan koma di Oracle

  4. Ubah kata sandi pengguna melalui jdbc. Masalah dengan pass yang mengandung tanda tanya

  5. Prosedur pemanggilan dari oracle ke crystal report