Oracle
 sql >> база данни >  >> RDS >> Oracle

Съхранена функция на Oracle - подайте името на таблицата като параметър

  1. Има пространство липсва след ключова дума FROM в командата EXECUTE IMMEDIATE.
  2. ИЗПЪЛНЕНИЕ НЕЗАБАВНО изразът има синтактична грешка . Липсва ви INTO клауза.
  3. Не можете да използвате EXECUTE IMMEDIATE в CURSOR FOR LOOP . По принцип вие не връщате нищо от командата execute immediate, както е споменато в точка 2 по-горе.
  4. Синтаксисът на повторение за LOOP не е правилно. Синтаксисът е FOR r IN 1..COUNT() .

След като коригирате кода си, ето как ще изглежда:

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.

И така, функцията е компилирана без грешки . Да изпълним го и вижте изхода :

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. Свързване към Oracle DB с активиран SSL чрез Java (JDBC)

  2. Как да изброите всички таблици в Oracle

  3. Oracle 11g - Проверете ограничението с RegEx

  4. Как да изчислим разликата между две дати в PostgreSQL/Oracle

  5. Защо функцията pi() не работи в Oracle, използвайки своя JDBC драйвер?