Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Unix Command run successfully through PL/SQL but showing no impact in UNIX.

578087May 17 2007 — edited Jun 6 2007
Hi,

I am using Oracle 9i and Unix on my system and trying to execute a UNIX shell command through external procedure in C.

I created a shared lib (libextproc.so) for the following function.

int sysrun(char *command)
{
return system(command);
}

This function runs fine when caled through a driver function in C, meaning that the shared lib is fine.


In PL/SQL, I have used the following method to invoke a UNIX command:-

create or replace library shell_lib as '/home/ECETRAonsite/oracle/OraHome1/lib/libextproc.so';
/


create or replace function sysrun (syscomm in varchar2)
return binary_integer
as language C
name "sysrun"
library shell_lib
parameters(syscomm string);
/

Now when I call this PL/SQL function to invoke the command, it is run succesfully but does not create the file.

SQL>
1 declare
2 rc number;
3 begin
4 rc := sysrun('/bin/touch /home/ECETRAonsite/oracle/OraHome1/test/sach');
5 dbms_output.put_line('Return Code='||rc);
6* end;
SQL> /
Return Code=0

PL/SQL procedure successfully completed.

I have verified that the path for 'touch' is correct.

Following are my configuration files.

listener.ora
-------------
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =172.21.161.69 )(PORT = 1521)(KEY = ECTPRF))
)

)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = extproc2)
(ORACLE_HOME = /home/ECETRAonsite/oracle/OraHome1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ANY")

)
(SID_DESC =
(SID_NAME = ECTPRF)
(ORACLE_HOME = /home/ECETRAonsite/oracle/OraHome1)
(ENVS = "EXTPROC_DLLS=ANY")
)
)


tnsnames.ora
-------------
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = extproc2)
)
)


Please suggest what is lacking for this to work properly.

Thanks,
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jul 4 2007
Added on May 17 2007
16 comments
2,485 views