Unix command from Plsql block

Hi all ,
I have tried unix command from PLSQL Block,
Please see the code.
DECLARE
stat INTEGER;
host_command varchar2(100);
errormsg VARCHAR2(80);
command varchar2(2000);
BEGIN
command:='touch /home/oracle/testting.txt';
dbms_pipe.reset_buffer;
host_command:= dbms_pipe.unique_session_name;
dbms_output.put_line('host_command:'||host_command);
dbms_pipe.pack_message(command);
dbms_output.put_line('pack message:'||command);
stat := dbms_pipe.send_message(host_command);
dbms_output.put_line('stat:'||stat);
IF stat <> 0 THEN
raise_application_error(-20000, 'Error:'||TO_CHAR(stat)||' sending on pipe');
END IF;
stat := dbms_pipe.receive_message(host_command);
dbms_output.put_line('stat2:'||stat);
IF stat <> 0 THEN
raise_application_error(-20000, 'Error:'||TO_CHAR(stat)||' receiving on pipe');
END IF;
dbms_pipe.unpack_message(errormsg);
dbms_output.put_line('errormsg:'||errormsg);
IF errormsg <> 'SUCCESS' THEN
raise_application_error(-20000, 'Execution error: '||errormsg);
END IF;
END;
Nothing happend from this code just getting only following result with error.
-----------------result-----------------------------
host_command:ORA$PIPE$002D19820001
pack message:touch /home/oracle/testting.txt
stat:0
stat2:0
errormsg:touch /home/oracle/testting.txt
DECLARE
ERROR at line 1:
ORA-20000: Execution error: touch /home/oracle/testting.txt
ORA-06512: at line 33
Can any one tell me what i doing wrong in this code.
I m working on Oracle 11g and AIX unix server.

This is the forum for the SQL Developer product, not for general PL/SQL questions. There is a link to the SQL and PL/SQL forum in the announcement at the top of this forum.

Similar Messages

  • Run Unix command from PLSQL

    I am trying to execute simple Unix command such as (/UItools/touch test.txt or /UItools/cp t1.txt t2.txt ) from PL/SQL. Could somebody pls help?

    Hi,
    you can use DBMS_PIPE to achieve this
    CREATE OR REPLACE FUNCTION exec_host_command( lc_cmd IN VARCHAR2 )
    RETURN INTEGER IS
    ln_status NUMBER;
    lc_errormsg VARCHAR2(80);
    lc_pipe_name VARCHAR2(30);
    BEGIN
    lc_pipe_name := ‘HOST_PIPE’;
    dbms_pipe.pack_message( lc_cmd );
    ln_status := dbms_pipe.send_message(lc_pipe_name);
    RETURN ln_status;
    END;
    Alternatively you can write a java stored procedure to do the same
    CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Cmd" AS
    --==========================================================--
    -- Class Cmd
    --==========================================================--
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class Cmd {
    *Static method to invoke host system commands
    *input variable String Command
    *Returns int. 0 for success and any other number
    *for failure of the command
    public static int executeCommand(String s_command) {
    try {
    /*Get the runtime shell and execute the system command
    *Wait till the command is executed
    final Process pr = Runtime.getRuntime().exec(s_command);
    pr.waitFor();
    return pr.exitValue();
    catch (Exception ex) {
    System.out.println(ex.getLocalizedMessage());
    return -1;
    }/*End of function executeCommand*/
    SHOW ERRORS
    EXIT;
    Grant the permissions
    --Grant Host File permissions to the APPS schema
    DBMS_JAVA.grant_permission ('<USER>', 'java.io.FilePermission',
    '<<ALL FILES>>', 'read ,write, execute, delete');
    --Grant Runtime Write permissions to the APPS schema
    DBMS_JAVA.grant_permission ('<USER>', 'SYS:java.lang.RuntimePermission',
    'writeFileDescriptor', '');
    --Grant Runtime Read permissions to the APPS schema
    DBMS_JAVA.grant_permission ('<USER>', 'SYS:java.lang.RuntimePermission',
    'readFileDescriptor', '');
    and create a wrapper plsql call
    FUNCTION Cmd (p_command IN VARCHAR2)
    RETURN NUMBER
    AS LANGUAGE JAVA
    NAME 'Cmd.executeCommand (java.lang.String) return int';
    Edited by: navsriva on Apr 13, 2010 3:21 PM

  • How to execute unix command in plsql block( urgent)

    Hi All,
    i want rename the unix folder to New name on update non_employee table . So, please give me idea how to use unix command here.... Please suggest me ASAP ... Its urgent
    CREATE or REPLACE TRIGGER NON_EMPLOYEE_AftUpd_trg
    AFTER UPDATE ON NON_EMPLOYEE
    FOR EACH ROW
    BEGIN
    IF :new.DIST_LIVELINK_PATH <> :old.DIST_LIVELINK_PATH THEN
    rename unixfolder1 to :new.dist_livelink_path.
    end IF;
    END;

    The solution will depend a lot on your Oracle version, which you forgot to mention ;)
    btw shouldn't that be (in pseudocode)
    rename :old.dist_livelink_path to :new.dist_livelink_pathotherwise it will always fail after the first time?
    In Unix that would require the mv command.

  • How to execute unix command from ODI Procedure

    Hi,
    I am trying to execute below unix command from ODI Procedure (Command on Target tab) but I am getting the error "java.io.IOException: Cannot run program "cd": error=2, No such file or directory" but when I try to execute the same command using OdiOSCommand, it is executing successfully. I don't want to use shell script to execute this command. Is there any specific syntax am I missing to execute this command from ODI procedure?
    cd /project3/tmt/;ls *.dmp > dmplist.lst
    Please help me on this...
    Thanks
    MT

    Hi nahlikh,
    Thank you for the reply.
    I used below command in Procedure but still getting the same error as "java.io.IOException: Cannot run program "OdiOSCommand": error=2, No such file or directory".
    OdiOSCommand "-COMMAND=cd /project3/tmt/;ls *.dmp > dmplist.lst"
    as I mentioned earlier if I use the command cd /project3/tmt/;ls *.dmp > dmplist.lst in OdiOSCommand tool it is executing successfully without any issues.
    any thoughts appreciated to get a solution for this issue.
    Thanks
    MT

  • Call an interactive UNIX command from java

    Hi,
    I want to call a UNIX command from java. When issue the command 'htpasswd -c filename username' on UNIX terminal, it asks for the new password and the then confirmation password again (yeah, unfortunately the htpasswd installed on our system does not allow you proivde the password on the command line. So have to work interactively ). Now, I have written a simple java program RunCommand.java. I am hardcoding the password for the htpasswd command in the file (in the real situation, password will be generated dynamically). I want to issue 'java RunCommand' on the UNIX command line and get back the command prompt without being asked for the password twice. The code is below, but the Outputstream does not work as expected. It always asks for inputs. Any idea? Many thanks.
    import java.io.*;
    public class RunCommand {
    public static void main(String args[]) throws Exception {
    String s = null;
    try {
    String cmd = "htpasswd -c filename username ";
    // run a Unix command
    Process p = Runtime.getRuntime().exec(cmd);
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    OutputStream stdOut = p.getOutputStream();
    String pswd = "mypassword";
    while ((s = stdInput.readLine()) != null) {
         s = stdInput.readLine();
         stdOut.write(pswd.getBytes());          
         stdOut.flush();
    System.out.println("Here is the standard error of the command (if any):\n");
    while ((s = stdError.readLine()) != null) {
    System.out.println(s);
    stdOut.close();
    stdInput.close();
    stdError.close();
    System.exit(0);
    catch (IOException e) {
    System.out.println("exceptions caught: ");
    e.printStackTrace();
    System.exit(-1);

    There are only about 9 billion responses a day on how to do this. Use the search feature.

  • Call Unix Command From Reports Using Java

    Hi,
    Could somebody please show me a sample coding to call Unix command from 10g report using java?
    In metalink doc id 361857.1 does not show much.
    Thanks,
    neemin

    Hi,
    I have a problem with synchronization of the java commands.
    In the Before Parammeter Form trigger, I have:
    function BeforePForm return boolean is
    rt ORA_JAVA.JOBJECT;
    proc ORA_JAVA.JOBJECT;
    v_txt varchar2(32000);
    i integer := 0;
    v_cd_modulo int;
    v_arqlog text_io.file_type;
    cursor c_evento is
    select codigo,
    nome
    from
    (select e.cd_evento || e.cd_edicao codigo
    ,nm_evento nome
    from grh_ev_evento e
    where e.CD_GRUPO in (select cd_grupo
    from grh_ev_adm
    where cd_usuario = (select cd_usuario
    from usuario
    where login_usuario = :AUTHID)))
    order by substr(nome, 11);
    begin
    -- Create the context for logged user
    if instr(upper(nvl(:AUTHID,'RWCLIENT')),'RWCLIENT') > 0 then
    :AUTHID := :SSO_USUARIO;
    end if ;
    TCEENV.SET_TCEENV(:AUTHID);
    if PK_SCA.SCA_GET_USER_RIGHTS(:sca_module_name, :AUTHID) IS NULL then
    srw.message(100, 'Access denided!');
    return (FALSE);
    end if;
    -- Create file in Report Server (UNIX)
    v_txt := '<BR>' || htf.formSelectOpen('P_EV_EDICAO', 'Evento: ');
    :p_file := '/u03/SCAWEB/repout/' || :sca_module_name || '_' ||
    pk_sca.sca_encrypt(:AUTHID || to_char(systimestamp, 'ss.ff'));
    v_arqlog := text_io.fopen (:p_file, 'A');
    text_io.put_line (v_arqlog, v_txt);
    for reg in c_evento loop
    i := i + 1;
    if i = 1 then
    v_txt := '<OPTION SELECTED VALUE="' || reg.codigo || '">' || reg.nome;
    else
    v_txt := '<OPTION VALUE="' || reg.codigo || '">' || reg.nome;
    end if;
    text_io.put_line (v_arqlog, v_txt);
    end loop;
    v_txt := '</SELECT></CENTER></form></BODY> </HTML>';
    text_io.put_line (v_arqlog, v_txt);
    text_io.fclose (v_arqlog);
    SRW.SET_AFTER_FORM_HTML(SRW.FILE_ESCAPE, :p_file);
    rt := RUNTIME.GetRuntime();
    proc := RUNTIME.exec(rt,'rm ' || :p_file);
    return (TRUE);
    end;
    The problem is that there isn't a "synchronize" command, and the
    RUNTIME.exec(rt,'rm ' || :p_file) don't works (it does nothing) because
    the SRW.SET_AFTER_FORM_HTML has a large delay and the following
    command is ignored.
    How can I solve it?
    thanks,
    lmprestes

  • Issueing unix command from java

    I am using FTPConnection.java by Bret Taylor, for uploading files to remote linux portal. But i cannot issue any unix command from it . please anyone help me in this case?

    Read this:
    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
    It'll explain it all. - MOD

  • Running Unix Command from WEB-APPLICATION

    Hi all,
    I want to run unix command from a java-based web application. the basic code part is this ---
    public class RunCommand
          public String runIt()
              String s = null, returnString = "";
              Process p=null;
              try
                       Runtime rt = Runtime.getRuntime();
                  p = rt.exec("sh testPOC.ksh");
                  p.waitFor();
                  BufferedReader stdInput = new BufferedReader(new
                       InputStreamReader(p.getInputStream()));
                  BufferedReader stdError = new BufferedReader(new
                       InputStreamReader(p.getErrorStream()));
                  // read the output from the command
                  returnString += "Here is the standard output of the command:<br>";
                  while ((s = stdInput.readLine()) != null) {
                      returnString += s;
                  // read any errors from the attempted command
                  returnString += "Here is the standard error of the command (if any): <br>";
                  while ((s = stdError.readLine()) != null) {
                      returnString += s;
              catch (IOException e)
                  returnString += "exception happened - here's what I know: ";
                  returnString += "error-> " + e.getMessage();
              catch(Exception e)
                returnString += "exception happened - here's what I know: ";
                  returnString += "error-> " + e.getMessage();
              return returnString;
      }this class is kept as an inner class. The control comes to its outer class, from servlet, from which the runit() is called. but the exception is occuring at line of p=rt.exec(.....). it tells "<command name> : not found transaction completed" [got this using getMessage() method].
    i am unable to show(and see, too) the stacktrace, because i don't have access to that test environment and its log. i can't run this in local because its windows one.
    now can anyone tell me, where is the problem. is there any limitation in web application server/container? this was successful when i used command prompt writing a .java file. Please help me. Thanks in advance...

    Friends, i've got, where the problem is.
    when we run a class file directly from a command prompt, we get an environment with that shell window. but for a servlet application running these kind of commands from a class creates kind of child processes. each and every command is executed as a child process of jvm and don't get those environment. we have 'PATH' variable in the environment. when a command (say, 'dir' or 'sh' or 'ls', etc.) is executed, the shell first search for that executable file (i.e. dir / sh / ls) in the given paths in the variable 'PATH'. this is not available for the child commands of jvm. hence the basic commands are searched in the current directory of the jvm and they are failed.
    i solved the problem giving full path of the commands. like :
    p = rt.exec("/bin/sh runningScript.ksh")

  • Execute unix commands from Java

    Hi,
    I have a client application running on windows. This client should connect to a unix server and check for the existence of a file and display the result as "File found/File not found". In order to connect from windows to the unix server, I used the sockets and the connection is successfully established. The second part is to check for the presence of the file in unix server. I searched in google.com and the option I found to execute a unix command from java is the "Runtime.exec()". Runtime.exec is considered as the less effective (not a favorable) one.
    Is there any other option available (other than the Runtime) to execute the unix command from java? Can you please let me know.
    Thanks a lot
    Aishu

    So, please let me know how I can execute the above unix commands without Runtime.exec()You have a client and a server.
    You want something to run on the server, not the client.
    That means that something must in fact being running on the server before the client does anything at all.
    For example telnet. Or a J2EE server application.
    So is something like that running?
    If not then there absolutely no way to do what you want, even with Runtime.exec().
    If yes then what you do depends on what is running. So Runtime.exec() would be pointless if a J2EE server was running.

  • Run multiple unix commands from ODI procedure

    I want to run a series of unix commands from ODI procedure. I dont want to use Unix shell scripts. (I know that works).I am just trying to place the contents of the shell scripts in ODI procedure with Operating system as technology. But I am unable to execute the proecedure.
    For example below is a very small 3 line commands I would execute
    filename="/var/test.txt"
    ls -l $filename > /var/anotherfile.txt
    chmod 777 $filename
    I am not sure if there is any specific syntax that I have to follow for executing unix commands. Also I dont want to write a Jython and use os.system command as well.
    Appreciate any help on this

    First your original question... You can put more than one DOS command on a single line, simply separate each command with an ampersand (&). For example:
    mkdir c:\abc & cd abc & dir*
    Regarding your concerns about performance, well that would depend on exactly what you mean. Using CLIENT_HOST (or HOST on the server) simply opens a shell (DOS in this case) then passes your command to it. The performance of performing this action really isn't measurable. Basically you are just pressing a button and you should get a near immediate action. As for the performance of executing each command, that has nothing to do with Forms. Once the command is passed to the shell, the rest is a function of the shell and whatever command you passed.
    Having said that, if you were to write something sloppy like a loop (in pl/sql) which called CLIENT_HOST lots of times repeatedly, then yes there would be a performance problem because the pushing of the button will cause an exchange to and from the server and each cycle in the loop will do the same.
    So the answer to how performance is impacted will depend on what exactly you need to accomplish. If it is a single call to CLIENT_HOST, this should be fine.

  • Calling Unix command from the plsql

    Hi ,
    I am executing java code from the UNIX Shell script. Before executing this command i want to write plsql code to and pass the files to java command.
    In the plsql code i want to select request id's using the cursor and find the .out files for each request id in the outfile path. once the file is found i want to copy that .out file to the current directory where the java command is going to execute.
    Please suggest me how to use UNIX Command (in my case "cp") to copy the .out file from the outfile path to current directory after opening the cursor.

    If I understand you correctly, you want to generate a log of request id's from the database and send this to the operating system whereby you will execute the following:
    <p>
       <font face="courier">java org.apache.xalan.xslt.Process -XSL combinedfsg.xsl -OUT output.xml</font>
    <p>
    If that is correct, then you should be able to perform all of this w/ PL/SQL by generating the log from the database and write it to the O/S w/ UTIL_FILE. If you want to execute the java code at this point, you should be able to utilize Tom's method with the following:
    <p>
       <font face="courier">exec rc('java org.apache.xalan.xslt.Process -XSL combinedfsg.xsl -OUT output.xml');</font><p>

  • Call unix script within plsql block

    Hi all,
    can i call a unix script within a plsql block for example
    my unix script name is - Diff_dataload_process.sh
    declare
    begin
    select * from ......;
    Diff_dataload_process.sh
    exception
    end;
    please help me.
    Thanks,
    Krupa

    Hi, I think you need something like this:
         DBMS_SCHEDULER.create_program
         (program_name => 'sch_program',
    program_type => 'EXECUTABLE',
    program_action => '/home/nobody/input/test_job.sh',
    number_of_arguments => 0,
    enabled => TRUE,
    comments => 'Test Program'
    end;
    and there's another ways to do it:
    [calling shell|http://www.dba-oracle.com/t_execute_shell_script_plsql_procedure.htm]

  • What is the trick to 'exec' UNIX commands from within IDM?

    Hellos...
    We need to change the permissions of a file which an IDM script writes.
    Basically I call this rule to write bytes to a file. The write method works but the exec fails.. I dont see permissions set to "666".
    <block trace='true'>
    <defvar name='retBuff'/>
    <invoke name='writeFileUtf8' class='com.waveset.util.Util'>
    <ref>fileName</ref>
    <ref>xmlData</ref>
    </invoke>
    <set name='retBuff'>
    <invoke name='exec' class='com.waveset.util.Util'>
    <concat>
    <s>chmod 666 </s>
    <ref>fileName</ref>
    </concat>
    </invoke>
    </set>
    </block>
    What is the correct method (or any way which works) to run shell commands from within IDM??????

    Ok. There is no 'trick' just an appreciation of what is being executed, where.
    This rule works. I was foolish in testing it via the BPE.
    I start the BPE on my laptop which connects to a UNIX server. Silly me was trying to run a UNIX command on my laptop. oops.
    Opening an xwindows session and starting the BPE on UNIX gives the expected results. Not sure when the BPE is finally killed off (we are on IDM 7.1) how does NetBeans handle this situation.
    GF

  • How to execute unix command from the Java program running on Windows

    Hello,
    I need to
    1. Execute a unix shell script from a Java program running on the Windows.
    2. I also need to capture the output of this shell script in my program.
    Please suggest me how to achieve this.
    Thanks in Advance.

    Hi...
    Something is missing here
    If you want to execute a shell script in windows that not posible unless you find or develop a unix shell script parser for windows.
    But if you are trying the execute a unix shell script on a remote unix computer from your java program running on a windows platform you can do that by logging on to the UNIX terminal which is running on port 23 I think.
    You can test this using telnet tool on windows
    just type on command prompt
    telnet <ip of the unix pc> <port number this case 23>
    you should get the unix terminal. If that works you can do the same through java or you can directly conect to port 23 of that pc using sockets that way your program will be platform independant

  • Unable to insert row in object table from plsql block

    I have table called test based on an object type. When I issue an insert statement from sqlplus, the row is inserted. The exact same sql statement in a plsql block gives the error below. Any ideas? (it is not a constraint problem).
    SQL> insert into test values( 3,2,1,1,'asp',1,'mach' );
    1 row created.
    SQL> begin
    2 insert into test values( 3,2,1,1,'asp',1,'mach' );
    3 end;
    4 /
    insert into test values( 3,2,1,1,'asp',1,'mach' );
    ERROR at line 2:
    ORA-06550: line 2, column 16:
    PL/SQL: ORA-06552: PL/SQL: Compilation unit analysis terminated
    ORA-06553: PLS-302: component 'DOCUMENT' must be declared
    ORA-06550: line 2, column 4:
    PL/SQL: SQL Statement ignored
    (ddl)
    CREATE OR REPLACE type document as object
    DOC_ID NUMBER (38),
    BATCH_ID NUMBER (38),
    STATE NUMBER (2),
    TRANSIENT NUMBER (2),
    ASP VARCHAR2 (20),
    USER_ID NUMBER (6),
    MACHINE VARCHAR2 (30),
    MEMBER PROCEDURE setState,
    MEMBER function getState RETURN NUMBER
    ) not final;
    create table test of document;

    Hi Adam
    You need to instantiate your object type in your insert statement(while doing through PL/SQL block), so try like this
    Insert into test values(document(1,2,'CO',55,'xyz','kkk','PENTIUM'));
    The reason you were successful through SQLPLUS was that, SQLPLUS automatically instantiate the values into object type.
    Qurashi

Maybe you are looking for

  • Controlling scope of availability check

    Hi, The requirement is to have different scope for availability check when Standard Sales Order and a Replacement Order (Replacing the goods for free). In the above scenario, the item category is different, so we can have different requirement type,

  • Best Resolution for 8" Digital Photo Frame

    What is best resolution to scan 2-1/4" medium format B&W negative film for display on an 8" DPF with a resolution of 800x600 pixels?

  • ASN not reached SAP R/3

    Hi All,    ASN (Advance Shipment Notification) was sent from SUS system to R/3 ,in R/3 idoc is not getting posted and in WE02   we are getting Idoc error with status 51 " Document already being processed" . Please help me in solve this issue. Thanks

  • Acrobat.exe product version question

    Hi Does anyone know of a link in Adobe where it shows every product version number for all acrobat.exe they have produced? Basically i just want to be able to see which version of the file is a professional and standard version. (Based on the file pr

  • JRockit 5.0 P26.4.1?

    Hello, I see an enhanced pre-release version of JRockit mentioned in the results of several benchmarks as BEA JRockit(R) 5.0 P26.4.1 (build P26.4.1-5-64782-1.5.0_06-20060726-0014-win-x86_64). The date appears to be 7-26-2006. I am trying to maximize