ugrás a tartalomhoz

ORACLE 00902 hiba

aspirany · 2010. Ápr. 27. (K), 12.40
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.
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;

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
 
1

Sorrendiséggel nem lehet

deejayy · 2010. Ápr. 28. (Sze), 07.40
Sorrendiséggel nem lehet gond? Úgy értem a függvényben (EMP_DATA_FUNC) használod a t_emp típust, amit később definiálsz.
2

pontosan

Crystal · 2010. Ápr. 28. (Sze), 20.38
dede, szerintem is ez a gond (már csak azért is mert a 00902 az az "invalid datatype")
3

köszönöma asegytséget

aspirany · 2010. Ápr. 29. (Cs), 12.25
sql_query := T_EMP_RT ('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)';

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.