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

Fungsi tersimpan Oracle - berikan nama tabel sebagai parameter

  1. Ada ruang hilang setelah FROM kata kunci dalam pernyataan EXECUTE IMMEDIATE.
  2. EKSEKUSI SEGERA pernyataan memiliki kesalahan sintaks . Anda kehilangan MENJADI ayat.
  3. Anda tidak dapat menggunakan EXECUTE IMMEDIATE di dalam KURSOR UNTUK LOOP . Pada dasarnya, Anda tidak mengembalikan apa pun dari pernyataan langsung eksekusi sebagaimana disebutkan pada poin 2 di atas.
  4. Sintaks iterasi untuk LOOP tidak benar. Sintaksnya adalah FOR r IN 1..COUNT() .

Setelah memperbaiki kode Anda, ini akan terlihat seperti:

SQL> CREATE OR REPLACE TYPE TES_JML_OBJ IS OBJECT(JUMLAH NUMBER)
  2  /

Type created.

SQL> CREATE OR REPLACE TYPE TES_JML_TABLE IS TABLE OF TES_JML_OBJ
  2  /

Type created.

SQL> CREATE OR REPLACE
  2    FUNCTION jumlahBaris(
  3        namatabel VARCHAR2)
  4      RETURN tes_jml_table
  5    IS
  6      TABEL TES_JML_TABLE := TES_JML_TABLE();
  7      cnt NUMBER;
  8    BEGIN
  9      EXECUTE IMMEDIATE 'select count(*) as jumlah from ' || NAMATABEL INTO CNT;
 10      FOR R IN 1..CNT
 11      LOOP
 12        TABEL.EXTEND;
 13        TABEL(R) := TES_JML_OBJ(R);
 14        dbms_output.put_line(TES_JML_OBJ(R).jumlah);
 15      END LOOP;
 16      RETURN tabel;
 17    END;
 18    /

Function created.

SQL> SHO ERR
No errors.

Jadi, fungsi dikompilasi tanpa kesalahan . Ayo eksekusi dan lihat keluaran :

SQL> SET SERVEROUTPUT ON
SQL> SELECT JUMLAHBARIS('EMP') FROM DUAL;

JUMLAHBARIS('EMP')(JUMLAH)
--------------------------------------------------------------------------------
TES_JML_TABLE(TES_JML_OBJ(1), TES_JML_OBJ(2), TES_JML_OBJ(3), TES_JML_OBJ(4), TE
S_JML_OBJ(5), TES_JML_OBJ(6), TES_JML_OBJ(7), TES_JML_OBJ(8), TES_JML_OBJ(9), TE
S_JML_OBJ(10), TES_JML_OBJ(11), TES_JML_OBJ(12), TES_JML_OBJ(13), TES_JML_OBJ(14
))


1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya mengingat ke arah mana SEBELUM harus pergi di CONNECT BY query

  2. Fungsi Oracle Pipelined

  3. Menggabungkan Data Menggunakan Fungsi Grup (grup demi oracle)

  4. SQL yang sangat sederhana Bukan ekspresi GROUP BY - Oracle

  5. jalankan file exe di pemicu Oracle