Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: giving field name as variable of a function
Diablo <diabl_at_email.com> wrote:
: I need to write a function that takes a field name as variable like this:
: Function F_PUR_F05
: ( FieldName IN VARCHAR2)
: cursor C_PER is
: SELECT * FROM sometable
dbms_sql.column_value(sql_cursor, 1, t_col1);: .......
: WHERE FieldName ='XXXX';
Check out the DBMS_SQL package for doing dynamic SQL.
Function F_PUR_F05( FieldName IN VARCHAR2) return whatever is
sql_cmd varchar2(2000); sql_cursor number; rtn_val number; t_col1 varchar2(10);
sql_cmd := 'SELECT col1, col2, col3 FROM sometable WHERE ' ||
FieldName || '=''XXXX'''; -- Note: no ; in the string sql_cursor := dbms_sql.open_cursor;
dbms_sql.parse(sql_cursor, sql_cmd, dbms_sql.v7); dbms_sql.define_column(sql_cursor, 1, t_col1, 10); dbms_sql.define_column(sql_cursor, 2, t_col2, 25); dbms_sql.define_column(sql_cursor, 3, t_col3);
rtn_val := dbms_sql.execute(sql_cursor); LOOP
IF dbms_sql.fetch_rows(sql_cursor) = 0 THEN EXIT; END IF; dbms_sql.column_value(sql_cursor, 1, t_col1); dbms_sql.column_value(sql_cursor, 2, t_col2); dbms_sql.column_value(sql_cursor, 3, t_col3); ....
If you have this in a package you may need to include the progrma:
PRAGMA RESTRICT_REFERENCES (F_PUR_F05, WNDS, WNPS, RNDS, RNPS); if you plan to use the function in another select statement:
select F_PUR_F05(col1) ...
Yes, dynamic SQL can be a pain at times but it is very powerful. One note on DBMS_SQL, the dynamic SQL statements run under the permissions of the owner of the PL/SQL procedure and not who ran it.
Good luck,
Steven
--
_|_ | _|_ "I am the way and the truth and the life. | --|-- | No one comes to the Father except through Steven Whatley | | | me. If you really knew me, you would Houston, Texas | know my Father as well. From now on, swhatley_at_blkbox.com | you do know him and have seen him." http://www.blkbox.com/~swhatley/ -- Jesus Christ (John 14:6-7 NIV)Received on Wed Jun 02 1999 - 10:44:29 CDT
![]() |
![]() |