Calling pipelined table functions
437240Feb 24 2006 — edited Jul 11 2006Hi,
I have created a table function with the below code.
CREATE TYPE str_tab_privs AS OBJECT
(org_id CHAR (10),
org_type_id CHAR (10));
/
CREATE TYPE str_tab_privs_table AS TABLE OF str_tab_privs;
/
CREATE or replace FUNCTION getOrgName (org CHAR)
RETURN str_tab_privs_table PIPELINED IS
TYPE ref0 IS REF CURSOR;
cur0 ref0;
v_org CHAR (10);
out_rec str_tab_privs := str_tab_privs (NULL, NULL);
BEGIN
v_org := org;
OPEN cur0 FOR
'SELECT org_id, org_type_id '||
'FROM org_link '||
'WHERE parent_id := v_org OR org_id = := v_org '
USING v_org;
LOOP
FETCH cur0 INTO out_rec.org_id, out_rec.org_type_id;
EXIT WHEN cur0%NOTFOUND;
PIPE ROW(out_rec);
END LOOP;
CLOSE cur0;
RETURN;
END getOrgName;
/
When I call the function I get these errors:
-- calling the function as system user:
SQL> select * from TABLE(getOrgName('MYORG'));
select * from TABLE(getOrgName('MYORG'))
*
ERROR at line 1:
ORA-00904: "GETORGNAME": invalid identifier
-- -- calling the function as schema owner:
SQL> select * from TABLE(getOrgName('MYOR'));
select * from TABLE(getOrgName('MYORG'))
*
ERROR at line 1:
ORA-00920: invalid relational operator
ORA-06512: at "TEST.GETORGNAME", line 11
Can anybody tell me how should I successfully call the function to retrieve the data from it? Any privilegies to be granted?
Thanks,
Paul