ORACLE 00902 hiba
Sziasztok!
Oarcle 10g -ben szerettem volan dinamikus sql-t futtatni.Nem sok sikerrel,mert állandóan 00902-es hibát kapom.
Előzmények.HR:EMPLOYES,HR.JOB táblákat áthoztam az én sémámba OFFICE próbaképpen.
a kód amit futtatni szerettem volna:
emp_data_func de nem megy az adat típussal van baja.
Jöszönöm a segítséget
■ Oarcle 10g -ben szerettem volan dinamikus sql-t futtatni.Nem sok sikerrel,mert állandóan 00902-es hibát kapom.
Előzmények.HR:EMPLOYES,HR.JOB táblákat áthoztam az én sémámba OFFICE próbaképpen.
majd
FUNCTION OFFICE.EMP_DATA_FUNC (pjobID IN VARCHAR2)
RETURN t_emp
AS
RESULT
t_emp := t_emp( );
szlatetelek_record TYPES.cursor_type;
sql_query VARCHAR2(1000);
sql_param VARCHAR2(100);
stmt_text VARCHAR2(3000);
BEGIN
/*szamlahoz tartozo tetelek megjelenitese*/
sql_query := 'SELECT
OFFICE.EMPLOYEES.EMPLOYEE_ID,
OFFICE.EMPLOYEES.FIRST_NAME,
OFFICE.EMPLOYEES.LAST_NAME,
OFFICE.EMPLOYEES.EMAIL,
OFFICE.EMPLOYEES.PHONE_NUMBER,
OFFICE.JOBS.JOB_TITLE
FROM
OFFICE.EMPLOYEES
INNER JOIN OFFICE.JOBS ON (OFFICE.EMPLOYEES.JOB_ID = OFFICE.JOBS.JOB_ID)';
/*stmt_text := CONCAT(sql_query,sql_param);*/
OPEN szlatetelek_record FOR sql_query;
FETCH szlatetelek_record BULK COLLECT INTO RESULT;
RETURN RESULT;
END;
majd
CREATE TYPE OFFICE.T_EMP_RT AS OBJECT
(
EMPLOYEE_ID NUMBER(6,0),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25),
EMAIL VARCHAR2(25),
PHONE_NUMBER VARCHAR2(20),
JOB_TITLE VARCHAR2(35)
);
aztán
CREATE TYPE OFFICE.T_EMP
AS TABLE OF OFFICE.T_EMP_RT
legvégül
CREATE PACKAGE Types AS
TYPE cursor_type IS REF CURSOR;
END Types;
FUNCTION OFFICE.EMP_DATA_FUNC (pjobID IN VARCHAR2)
RETURN t_emp
AS
RESULT
t_emp := t_emp( );
szlatetelek_record TYPES.cursor_type;
sql_query VARCHAR2(1000);
sql_param VARCHAR2(100);
stmt_text VARCHAR2(3000);
BEGIN
/*szamlahoz tartozo tetelek megjelenitese*/
sql_query := 'SELECT
OFFICE.EMPLOYEES.EMPLOYEE_ID,
OFFICE.EMPLOYEES.FIRST_NAME,
OFFICE.EMPLOYEES.LAST_NAME,
OFFICE.EMPLOYEES.EMAIL,
OFFICE.EMPLOYEES.PHONE_NUMBER,
OFFICE.JOBS.JOB_TITLE
FROM
OFFICE.EMPLOYEES
INNER JOIN OFFICE.JOBS ON (OFFICE.EMPLOYEES.JOB_ID = OFFICE.JOBS.JOB_ID)';
/*stmt_text := CONCAT(sql_query,sql_param);*/
OPEN szlatetelek_record FOR sql_query;
FETCH szlatetelek_record BULK COLLECT INTO RESULT;
RETURN RESULT;
END;
majd
CREATE TYPE OFFICE.T_EMP_RT AS OBJECT
(
EMPLOYEE_ID NUMBER(6,0),
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25),
EMAIL VARCHAR2(25),
PHONE_NUMBER VARCHAR2(20),
JOB_TITLE VARCHAR2(35)
);
aztán
CREATE TYPE OFFICE.T_EMP
AS TABLE OF OFFICE.T_EMP_RT
legvégül
CREATE PACKAGE Types AS
TYPE cursor_type IS REF CURSOR;
END Types;
a kód amit futtatni szerettem volna:
emp_data_func de nem megy az adat típussal van baja.
Jöszönöm a segítséget
Sorrendiséggel nem lehet
pontosan
köszönöma asegytséget
OFFICE.EMPLOYEES.EMPLOYEE_ID,
OFFICE.EMPLOYEES.FIRST_NAME,
OFFICE.EMPLOYEES.LAST_NAME,
OFFICE.EMPLOYEES.EMAIL,
OFFICE.EMPLOYEES.PHONE_NUMBER,
OFFICE.JOBS.JOB_TITLE
FROM
OFFICE.EMPLOYEES
INNER JOIN OFFICE.JOBS ON (OFFICE.EMPLOYEES.JOB_ID = OFFICE.JOBS.JOB_ID)';
ez a megoldás.
Egyébként mennyire jó bulk collectbe összegyűjteni az adatokat.Macerássabbnak tűnik, mint mint simán ref cursorba összegyűjteni.