Execute a sql procedure with java?
Hi
Got this CREATE OR REPLACE PROCEDURE legg_til_student (p_fnavn student.fornavn%TYPE, p_enavn student.etternavn%TYPE, p_klasseid student.klasseid%TYPE) IS
v_id student.id%TYPE;
BEGIN
SELECT MAX(id) +1 INTO v_id
FROM student;
IF p_klasseid > 3 THEN
DBMS_OUTPUT.PUT_LINE ('Ugyldig klasseid');
ELSE
INSERT INTO student VALUES (v_id, p_fnavn, p_enavn, p_klasseid);
END IF;
END;
/ Procedure that are mad in sql+ , the problem is how to run this trough java ?
Thanks :)
Hey I wrote this :
public void registrerStudent(StudentVO student) {
Connection con = null;
CallableStatement proc;
try {
proc = con.prepareCall("{call legg_til_student(?, ?) }");
proc.setString(1, student.finnFornavn());
proc.setString(2, student.finnEtternavn());
proc.setInt(3, student.finnKlasse());
proc.execute();
proc.close();
} catch (SQLException e) {
System.out.println("BLEHHH");
e.printStackTrace();
}And Testing with this class :
public class Test {
public static void main(String args[]){
StudentDAO dao = new StudentDAO();
StudentVO t = new StudentVO("Arne", "Nilsen", 3);
dao.registrerStudent(t);
}But i am getting a
java.lang.NullPointerException
at ver002.student.StudentDAO.registrerStudent(StudentDAO.java:44)
at ver002.student.Test.main(Test.java:22)
Exception in thread "main" Any idea what i am doing wrong ?
Similar Messages
-
Hi all
Could anybody tell me how can I exec an sql proc with Java?
Thank you very much
Regards
chkmja
My Java code and SQL proc look like below.
Java code
m_connection.createStatement().execute("exec MSG_SNAPSHOT()");
sql Proc
CREATE OR REPLACE PROCEDURE MSG_SNAPSHOT AS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE REVISION_MESSAGE';
INSERT INTO REVISION_MESSAGE (PK_ID, MSGSTATE, SCHEDSTATE, EXTERN_ID, OBJECT_NAME, PROCESS_AT)
SELECT msg.PK_ID, msg.MSGSTATE, msg.SCHEDSTATE, msg.EXTERN_ID, msg.OBJECT_NAME, msg.PROCESS_AT
FROM MESSAGE partition (non_final) msg WHERE msg.SCHEDSTATE <> -1;
END;
Here my problem is I get --->
java.sql.SQLException: ORA-00900: invalid SQL statementJust a quick check under java.sql.Connection found:
prepareCall
public CallableStatement prepareCall(String sql)
throws SQLException
Creates a CallableStatement object for calling database stored procedures.
Isn't this what you should be using and not createStatement() ? -
How to call sql procedure with parameter from java
Hello,
i am trying to call one sql procedure with two parameters from java.
the first parameter is In parameter, the second is OUT.
the return value of this java method should be this second parameter value.
the following is my java code:
protected String getNextRunNumber() {
String runnumber=null;
String sql = "{call APIX.FNC_SST_EXPORT.GET_NEXT_RUNNUMBER (?,?)}";
CallableStatement state = null;
try{
Connection con= getDatabaseConnection();
state = con.prepareCall(sql);
state.setString(1, m_appKeyExport);
state.registerOutParameter(2,Types.NUMERIC,0);
state.execute();
ResultSet resultR = (ResultSet)state.getObject(2);
while (resultR.next()) {
runnumber=resultR.getBigDecimal(1).toString();
catch (SQLException e){System.out.println("You can not get the export next run number properly");}
return runnumber;
i got error message like:
java.lang.ClassCastException: java.math.BigDecimal
As far as i knew, if the parameter is number or decimal, we should give also the paramer scale to the method: state.registerOutParameter(), but i still get this error message.
Please help me to solve this problem.
Thanks a lot.state.execute();
i try to use debug to find the problem, in this line, i saw
OracleCallableStatement(OraclePreparedStatement).execute() line: 642 [local variables unavailable]
is this the problem? -
Jdbc NullPointerException calling pl/sql procedure from java
Hi.
Getting the following exception calling a plsql procedure from jdbc.
- Jdbc version is 10.2.0.2, but it also happens running several other variants, including 10.1.0.5.0.
- Application is running in Weblogic 8.1.3 (8.1 SP 3).
The procedure call itself has 2 in/out parameters which are tables (actually just 1 dimensional arrays), which I'm suspecting has something to do with the problem. I can successfully call this procedure using a plsql developer tool with the same bind parameters.
Any ideas?
Exception encountered while executing PL/SQL procedure MVT_Web_Inquiry.ShowInquiry:
java.lang.NullPointerException at oracle.jdbc.driver.T4CTTIiov.processRXD([Loracle.jdbc.driver.Accessor;I[B[C[SILoracle.jdbc.driver.DBConversion;[B[B[[Ljava.io.InputStream;[[[B[[Loracle.jdbc.oracore.OracleTypeADT;Loracle.jdbc.driver.OracleStatement;[B[C[S)[Loracle.jdbc.driver.Accessor;(T4CTTIiov.java:139)
at oracle.jdbc.driver.T4C8Oall.receive()V(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(ZZZZ)V(T4CCallableStatement.java:215)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(Z)V(T4CCallableStatement.java:1119)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout()V(OracleStatement.java:1278)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal()I(OraclePreparedStatement.java:3446)
at oracle.jdbc.driver.OraclePreparedStatement.execute()Z(OraclePreparedStatement.java:3552)
at oracle.jdbc.driver.OracleCallableStatement.execute()Z(OracleCallableStatement.java:5261)
at weblogic.jdbc.wrapper.PreparedStatement.execute()Z(PreparedStatement.java:70)
at
[snip]OK... I figured it out.
Apparently, this error happens when you forget to register the output part of an in/out parameter. I would have hoped for better error messaging, but oh well.
-ed- -
Hi All,
I am working on a Data Warehousing Product and generating Web Reports.
These Web Reports are JSPs.
The basic architechture used for this is :
1. Get the inputs required for Report Generation through a Web GUI
2. Validate and Process (If Valid) the inputs so that it can be applied on the Data in the DB to fetch appropriate information.
3. The Data from the DB is retreived in the form of PL/SQL Procedures, which take the Processed information from Step 2 as Input and give the Output in the form of REF CURSORS.
Note: There are a many PL/SQL Procedures that are being executed, based on the configuration the Client has set. This configuration enables the Client to set the columns he wants to see in the Web Reports. This configuration is set before the Reports are run.
4. A call is made from Java to Oracle, each time a PL/SQL Procedure need to be executed. The REF CURSOR received as an Output from the PL/SQL Procedure is processed.
5. The next PL/SQL Procedure is called (if existing), else the Processed Data (from REF CURSOR Output) is displayed in the JSP as Web Reports.
The issue with above architechture is the PERFORMANCE.
I would like to know:
- The various ways in which data can be EFFICIENTLY & QUICKLY retrieved from PL/SQL Procedure in Java.
- Are there any APIs that improve the Java-Oracle Data Fetch Efficiency
- Is there any Java Framework available that can be used to increase the spped of Web Report generation.
- Do you suggest any changes in the above mentioned architechture, that make this work a Sweet Sixeen Year olg guy! ;)
- In general, any input that can increase the Speed of Web Report Generation.
Kindly let me know if I have not been clear at any point, so that I can re-explain the same more clearly.
And the most important thing, kindly scrap down your thoughts about the same.
Thanks a lot in advance for your VALUABLE INPUTS.
- VikasSpring
http://www.springframework.org/
http://static.springframework.org/spring/docs/2.0.x/reference/jdbc.html
http://static.springframework.org/spring/docs/2.0.x/reference/jdbc.html#jdbc-StoredProcedure -
PL/SQL WEB Toolkit: Using BUTTON to execute PL/SQL procedure
I am trying to execute a PL/SQL procedure with a "SUBMIT" button from a WEB page. I have several URLs that execute perfectly, but I do not want endusers to have to type the URL themselves. I want to display a web page with multiple URLs in a drop_down list. User chooses a member of the list, clicks the "SUBMIT" buttom and that specific URL executes and produces the proper result. I am NOT a web developer, but this is what I've written sofar:
CREATE OR REPLACE PROCEDURE html_list
IS
BEGIN
HTP.PRINT ('<html>');
HTP.PRINT ('<head>');
HTP.PRINT ('<meta http-equiv="Content-Type" content="text/html">');
HTP.PRINT ('<title>Title of the HTML File</title>');
HTP.PRINT ('</head>');
HTP.PRINT ('<body TEXT="#000000" BGCOLOR="#FFFFFF">');
HTP.PRINT ('<h1>List of Valid URLs</h1>');
HTP.PRINT ('<p>Choose your desired URL from the list below.');
HTP.PRINT ('<FORM method="post" action="WHATEVER_COUNTS_WEB">');
HTP.PRINT ('<FORM method="post" action="REQUEST_OBJECTS?PARAM1=MY_SCHEMA_ID">');
HTP.PRINT ( '<SELECT name="URL">
<option value="http://asai01.ffxlab.net:8080/me_epg_dad/WHATEVER_COUNTS_WEB">Count of Rows in Whatever Tables
<option value="http://asai01.ffxlab.net:8080/me_epg_dad/REQUEST_OBJECTS?PARAM1=ME">Request Objects for MY_SCHEMA_ID
<input type="submit" value="Submit"/>
</SELECT>');
HTP.PRINT ('</FORM>');
HTP.PRINT ('</body>');
HTP.PRINT ('</html>');
END;
Any help would be greatly appreciated. I've been writing PL/SQL code since 1989, but have never had to execute code via a WEB page until this week.
Thanks so muchHi,
Welcome to Oracle Forums!
Please acquaint yourself with the FAQ and forum etiquette if you haven't already done so.
Always post code snippets enclosed in a pair of {code} tags as explained in FAQ
This Forum is dedicated to Oracle Forms. Unfortunately there is no Forum for WebToolKit that I know of. The closest is Oracle Application Express (APEX).
If you objective is to have the User Navigate to the URL clicked then the easiest way is to use anchor tag with href attribute
CREATE OR REPLACE PROCEDURE html_list
IS
BEGIN
HTP.PRINT ('<html>');
HTP.PRINT ('<head>');
HTP.PRINT ('<meta http-equiv="Content-Type" content="text/html">');
HTP.PRINT ('<title>Title of the HTML File</title>');
HTP.PRINT ('</head>');
HTP.PRINT ('<body TEXT="#000000" BGCOLOR="#FFFFFF">');
HTP.PRINT ('<h1>List of Valid URLs</h1>');
HTP.PRINT ('<p>Choose your desired URL from the list below.</p>');
HTP.PRINT ('<a href="http://asai01.ffxlab.net:8080/me_epg_dad/WHATEVER_COUNTS_WEB" target="_blank">Count of Rows in Whatever Tables</a>');
HTP.PRINT('<a "http://asai01.ffxlab.net:8080/me_epg_dad/REQUEST_OBJECTS?PARAM1=ME" target="_blank">Request Objects for MY_SCHEMA_ID</a>');
HTP.PRINT ('<FORM method="post" action="WHATEVER_COUNTS_WEB">');
HTP.PRINT ('<FORM method="post" action="REQUEST_OBJECTS?PARAM1=MY_SCHEMA_ID">');
HTP.PRINT ( '<SELECT name="URL">
<option value="http://asai01.ffxlab.net:8080/me_epg_dad/WHATEVER_COUNTS_WEB">Count of Rows in Whatever Tables
<option value="http://asai01.ffxlab.net:8080/me_epg_dad/REQUEST_OBJECTS?PARAM1=ME">Request Objects for MY_SCHEMA_ID
<input type="submit" value="Submit"/>
</SELECT>');
HTP.PRINT ('</FORM>'); */
HTP.PRINT ('</body>');
HTP.PRINT ('</html>');
END;Change the target attribute to suite your needs. More here http://www.w3schools.com/tags/att_a_target.asp
Or, maybe explore Apex !
Cheers, -
Calling PL/SQL Procedures from Java
Hello,
I want to know, if it is possible to call PL/SQL Procedures from
SQLJ(which uses htp.print from the Package web toolkit ).
Though, it is possible to call normal procedures but if I want
to call PL/SQL procedures with htp.print then I get I error.
For example:
#sql{Call html_test()};
Can you give me a advice?
Your help is much appreciated!
M|llerOracle's htp packages are develop to be work with
mod_plsql/OAS/OWS webserver.
If you are trying to use htp packages first need to instanciate
some enviroment vars for htp packages, for example first you has
to call to owa.initialize procedure, populate owa.cgi array and
so on.
If you need more information about how this toolkit works you
could get the source of DB Prism at
http://www.plenix.com/dbprism/ this open source framework
includes backward compatibility with mod_plsql application and
then includes settings of this values from Java code.
Best regards, Marcelo. -
Creating Web service for PL/SQL Procedure with Complex Data Types
I need to created web service for PL/SQL Procedure with Complex Data types like table of records as parameters, how do we map the pl/sql table type parameters with web service, how to go about these?
Hello,
When you are creating a service from a Stored Procedure, the OracleAS WS tools will create necessary Java and PL wrapper code to handle the complex types (table of record) properly and make them compatible with XML format for SOAP messages.
So what you should do is to use JDeveloper or WSA command line, to create a service from your store procedure and you will see that most of the work will be done for you.
You can find more information in the:
- Developing Web Services that Expose Database Resources
chapter of the Web Service Developer's guide.
Regards
Tugdual Grall -
PL/SQL Procedures with the same name
Hi,
I have some PL/SQL procedures with the same name but different arguments.
If I try to catalog the second or third ALBPM always catalogs the first and I don't want to use this. ALBPM only catalogs the first one.
ALBPM Studio Logs:
Introspecci?n en curso...
Agregando procedimiento 'ADM_SGI.UGDIASINOI'
Agregando procedimiento 'ADM_SGI.UGDIASINOI'
Agregando procedimiento 'ADM_SGI.UGDIASINOI'
[Advertencia] No se puede agregar procedimiento 'UGDIASINOI'. Motivo: Duplicar nombre del componente (M?dulo DatabaseRoot.ADM_SGI - Componente UGDIASINOI)..
[Advertencia] No se puede agregar procedimiento 'UGDIASINOI'. Motivo: Duplicar nombre del componente (M?dulo DatabaseRoot.ADM_SGI - Componente UGDIASINOI)..
Analizando componentes
Any solution or idea??
Thanks!I need to retrive data from PL/SQL stored procedures. I am using the DynamicSQL component (2nd workaround) to retrive data from PL/SQL stored procedures. <br><br>
I am having some problems.<br><br>
This is the code I am running in Fuego Studio 5.5 SP 11 Build #71108:<br><br>
dynamicSQL as Fuego.Sql.DynamicSQL<br>
iterator as Iterator(Any[Any])<br>
sentence as String<br>
implname as String<br><br>
dynamicSQL = Fuego.Sql.DynamicSQL()<br>
implname = "conexionORBPAU"<br>
sentence = "var result REFCURSOR; " + <br>
"exec :result_cursor := pkg_audbpm_bpaasig_indicador.prgetsingle(9999);";<br>
iterator = executeQuery(DynamicSQL, sentence, implname, inParameters : []);<br><br>
And, this is the error:<br><br>
java.sql.SQLException: Falta el parametro IN o OUT en el indice:: 1 <br>
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)<br> at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)<br>
oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1681)<br>
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3280)<br>
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)<br>
at fuego.jdbc.FaultTolerantPreparedStatement.executeQuery(FaultTolerantPreparedStatement.java:579)<br>
at fuegoblock.sql.DynamicSQL.executeQuery(DynamicSQL.java:340)<br>
...<br><br>
This is the code of the PL/SQL in the Oracle DB:<br><br>
CREATE OR REPLACE PACKAGE PKG_AUDBPM_BPAASIG_INDICADOR IS<br>
TYPE cursor_type IS REF CURSOR;<br>
FUNCTION prGetSingle<br>
(<br>
p_ID_ASIG_INDICADOR IN NUMBER<br>
)<br>
RETURN cursor_type;<br><br>
END PKG_AUDBPM_BPAASIG_INDICADOR;<br><br>
is my code OK? Any ideas?<br><br>
Thanks in advance.<br> -
Send Datetime2 value to a SQL Procedure from Java using Hibernate
Hi All,
I Have a Procedure which takes a parameter of type datetime2.
The procedure is called from Java Hibernate.
How can I Pass datetime2 value to SQL procedure from Java?
Thanks in advance,
Shraddha GoreYou may define a global empty array in some package. Then you can do:
SQL> CREATE OR REPLACE PACKAGE pkg
AS
g_empty DBMS_SQL.varchar2_table;
END pkg;
Package created.
SQL> CREATE OR REPLACE PROCEDURE p (
p_tuids IN DBMS_SQL.varchar2_table "DEFAULT pkg.g_empty"
AS
BEGIN
NULL;
END p;
Procedure created.
SQL> BEGIN
p ();
END;
PL/SQL procedure successfully completed. -
How to execute a SQL procedure in UNIX
How to execute a SQL procedure in UNIX
Check this out..
-Sri
<< a.sql >>
create or replace procedure junk(nout out varchar2) is
x varchar2(20);
begin
select 'Sam' into x
from dual;
nout := x;
end;
<< Shell script >>
sqlplus -s / << DOC
scott/tiger
variable x varchar2(20);
set autoprint on
@a.sql
begin
junk(:x);
end;
exit
DOC
<< Execution of Shell SCript >>
# sh b.sh
Procedure created.
PL/SQL procedure successfully completed.
X
Sam -
Errer when, Call from java to pl sql procedure with table out parameter
Hi ,
Please help me ? It's urgent for me .....
My Oracle Code is like this ,
CREATE TABLE TEST_TABLE ( DATE1 DATE, VALUE_EXAMPLE VARCHAR2(20 BYTE), VALUE2_EXAMPLE VARCHAR2(20 BYTE), VALUE3_EXAMPLE NUMBER ); CREATE OR REPLACE TYPE TONERECORDTEST AS OBJECT ( DATE1 DATE, VALUE_EXAMPLE VARCHAR2(20), VALUE2_EXAMPLE VARCHAR2(20), VALUE3_EXAMPLE NUMBER ); CREATE OR REPLACE TYPE TTESTTABLE IS TABLE OF TONERECORDTEST; CREATE OR REPLACE PACKAGE test_collection_procedures AS PROCEDURE testCallProcedureFromJava(start_time IN DATE, end_time IN DATE, table_data OUT TTesttable); END test_collection_procedures; / CREATE OR REPLACE PACKAGE BODY test_collection_procedures AS PROCEDURE testCallProcedureFromJava(start_time IN DATE, end_time IN DATE, table_data OUT TTesttable) IS BEGIN SELECT TONERECORDTEST(date1, value_example, value2_example, value3_example) BULK COLLECT INTO table_data FROM TEST_TABLE WHERE DATE1>=start_time AND DATE1<=end_time; END testCallProcedureFromJava; END test_collection_procedures;
And my Java Code is like
import java.sql.Connection; import java.sql.DriverManager; import oracle.jdbc.OracleCallableStatement; import oracle.jdbc.OracleTypes; import oracle.sql.ARRAY; import oracle.sql.ArrayDescriptor; import oracle.sql.STRUCT; import oracle.sql.StructDescriptor; public class testPLCollectionType { public static void main(java.lang.String[] args) { try{ //Load the driver Class.forName ("oracle.jdbc.driver.OracleDriver"); // Connect to the database Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@serverbd:1521:squema1","user", "password"); // First, declare the Object arrays that will store the data (for TONERECORDTEST OBJECT TYPE) Object [] p2recobj; Object [] p3recobj; Object [] p4recobj; // Declare the Object Arrays to hold the STRUCTS (for TTESTTABLE TYPE) Object [] p2arrobj; // Declare two descriptors, one for the ARRAY TYPE // and one for the OBJECT TYPE. StructDescriptor desc1=StructDescriptor.createDescriptor("TONERECORDTEST",conn); ArrayDescriptor desc2=ArrayDescriptor.createDescriptor("TTESTTABLE",conn); // Set up the ARRAY object. ARRAY p2arr; // Declare the callable statement. // This must be of type OracleCallableStatement. OracleCallableStatement ocs = (OracleCallableStatement)conn.prepareCall("{call test_collection_procedures.testCallProcedureFromJa va(?,?,?)}"); // Declare IN parameters. Realize that are 2 DATE TYPE!!! Maybe your could change with setDATE ocs.setString(1,"01-JAN-04"); ocs.setString(2,"10-JAN-05"); // Register OUT parameter ocs.registerOutParameter(3,OracleTypes.ARRAY,"TTESTTABLE"); // Execute the procedure ocs.execute(); // Associate the returned arrays with the ARRAY objects. p2arr = ocs.getARRAY(3); // Get the data back into the data arrays. //p1arrobj = (Object [])p1arr.getArray(); p2arrobj = (Object [])p2arr.getArray(); System.out.println("Number of rows="+p2arrobj.length); System.out.println("Printing results..."); for (int i=0; i<p2arrobj.length; i++){ Object [] piarrobj = ((STRUCT)p2arrobj).getAttributes();
System.out.println();
System.out.print("Row "+i);
for (int j=0; j<4; j++){
System.out.print("|"+piarrobj[j]);
}catch (Exception ex){
System.out.println("Exception-->"+ex.getMessage());
Actually when i running the java program it is showing error
Exception-->ORA-06550: line 1, column 58:
PLS-00103: Encountered the symbol "VA" when expecting one of the following:
:= . ( @ % ;
The symbol ":=" was substituted for "VA" to continue.
I am not getting the error .Please help me out Dhabas Edited by: Dhabas on Jan 12, 2009 3:49 PM// Declare the callable statement.
// This must be of type OracleCallableStatement.
..."{call test_collection_procedures.testCallProcedureFromJa va(?,?,?)}");Looks like Ja divorced va. -
How to invoke a stored procedure on MS Sql Server with Java?
I started writing Enterprise Java Beans and created an ODBC dsn with MS Sql Server 2000 which I can access using jdbc:odbc:mySqlDSN. This all works fine using Java Sql Statements. What kind of Java/Java Sql statement can I use to invoke a stored procedure on the Sql Server? Is it possible to use ADO/ADO command objects with Java? Is it possible to import/implement Mdac2.6 ActiveX data objects libary in Java?
ThanksThanks all for your replies. I will search the api for callable statements. I am curious though, the reply that suggests using a prepared statement - can I put the name of a stored procedure in a prepared statment or is this just suggestions an action query like Insert Into, Update, Delete? Like with ADO you can say
cmdObject.CommandType = adStoredProcedure
cmdObject.CommandText = "NameOfStoredProc"
cmdObject.ExecuteNonQuery()
Once I am calling/importing/implementing the proper libraries/interfaces in Java, can a prepared statement reference a stored procedure as above?
Thanks -
PL/SQL Procedure Calling Java Host Command Problem
This is my first post to this forum so I hope I have chosen the correct one for my problem. I have copied a java procedure to call Unix OS commands from within a PL/SQL procedure. This java works well for some OS commands (Eg ls -la) however it fails when I call others (eg env). Can anyone please give me some help or pointers?
The java is owned by sys and it looks like this
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "ExecCmd" AS
//ExecCmd.java
import java.io.*;
import java.util.*;
//import java.util.ArrayList;
public class ExecCmd {
static public String[] runCommand(String cmd)
throws IOException {
// set up list to capture command output lines
ArrayList list = new ArrayList();
// start command running
System.out.println("OS Command is: "+cmd);
Process proc = Runtime.getRuntime().exec(cmd);
// get command's output stream and
// put a buffered reader input stream on it
InputStream istr = proc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(istr));
// read output lines from command
String str;
while ((str = br.readLine()) != null)
list.add(str);
// wait for command to terminate
try {
proc.waitFor();
catch (InterruptedException e) {
System.err.println("process was interrupted");
// check its exit value
if (proc.exitValue() != 0)
System.err.println("exit value was non-zero: "+proc.exitValue());
// close stream
br.close();
// return list of strings to caller
return (String[])list.toArray(new String[0]);
public static void main(String args[]) throws IOException {
try {
// run a command
String outlist[] = runCommand(args[0]);
for (int i = 0; i < outlist.length; i++)
System.out.println(outlist);
catch (IOException e) {
System.err.println(e);
The PL/SQL looks like so:
CREATE or REPLACE PROCEDURE RunExecCmd(Command IN STRING) AS
LANGUAGE JAVA NAME 'ExecCmd.main(java.lang.String[])';
I have granted the following permissions to a user who wishes to run the code:
drop public synonym RunExecCmd
create public synonym RunExecCmd for RunExecCmd
grant execute on RunExecCmd to FRED
grant javasyspriv to FRED;
Execute dbms_java.grant_permission('FRED','java.io.FilePermission','/bin/env','execute');
commit
Execute dbms_java.grant_permission('FRED','java.io.FilePermission','/opt/oracle/live/9.0.1/dbs/*','read, write, execute');
commit
The following test harness has been used:
Set Serverout On size 1000000;
call dbms_java.set_output(1000000);
execute RunExecCmd('/bin/ls -la');
execute RunExecCmd('/bin/env');
The output is as follows:
SQL> Set Serverout On size 1000000;
SQL> call dbms_java.set_output(1000000);
Call completed.
SQL> execute RunExecCmd('/bin/ls -la');
OS Command is: /bin/ls -la
total 16522
drwxrwxr-x 2 ora9sys dba 1024 Oct 18 09:46 .
drwxrwxr-x 53 ora9sys dba 1024 Aug 13 09:09 ..
-rw-r--r-- 1 ora9sys dba 40 Sep 3 11:35 afiedt.buf
-rw-r--r-- 1 ora9sys dba 51 Sep 3 09:52 bern1.sql
PL/SQL procedure successfully completed.
SQL> execute RunExecCmd('/bin/env');
OS Command is: /bin/env
exit value was non-zero: 127
PL/SQL procedure successfully completed.
Both commands do work when called from the OS command line.
Any help or assistance would be really appreciated.
Regards,
Bernard.Kamal,
Thanks for that. I have tried to use getErrorStream and it does give me more info. It appears that some of the commands cannot be found. I suspected that this was the case but I am not sure about how this can be as they all appear to reside in the same directory with the same permissions.
What is more confusing is output like so:
SQL> Set Serverout On size 1000000;
SQL> call dbms_java.set_output(1000000);
Call completed.
SQL> execute RunExecCmd('/usr/bin/id');
OS Command is: /usr/bin/id
exit value was non-zero: 1
id: invalid user name: ""
PL/SQL procedure successfully completed.
SQL> execute RunExecCmd('/usr/bin/which id');
OS Command is: /usr/bin/which id
/usr/bin/id
PL/SQL procedure successfully completed.
Regards,
Bernard -
Include Button that executes PL/SQL procedure to SQL query based region
I would like to add two columns to a SQL query region.
These columns would not be sourced from the query, but rather would be used to execute a PL/SQL procedure.
For example, I would like to have a manager approve or deny adding an additional employee to the department.
There would be one button for APPROVE. And, one button for DENY.
The PL/SQL procedure would execute to perform the required DML based upon the selected action (either APPROVE or DENY).
A sample output would look like this:
<APPROVE>, <DENY>, John Doe, Accountant
<APPROVE>, <DENY>, Jane Doe, Accountant
Is there any way to add a button to a SQL Query based report region where that button executes a stored proc? If so, what is the basic process for doing this?
Thanks!
-ReidIs there any way to add a button to a SQL Query based report region where that button executes a stored proc? If so, what is the basic process for doing this?Conditional page item? You can associate processes with buttons on a page
Maybe you are looking for
-
VGA vs DVI - What's the real difference?
Hi everyone, quick question. I currently have my 19" LCD display hooked up to my MacBook via the Apple Mini-DVI to VGA adapter. Here's my question. What is the real image quality difference between VGA and DVI-D connections? I don't watch videos or d
-
Unable to find imported files in music, even though they show up in playlists
I recently tried to import about 400 mp3s into iTunes so I can load them on my iPod. It went through the process of importing the files, and I didn't see any of the new songs in iTunes. I tried rebooting my computer, and they were still missing, howe
-
Packages removed from DP's with machine account
Hi, We have an incident wherein the packages are removed from the DP's with machine account. ISSUE: Packages removed from the DP’s. The package was successfully copied to all the DP’s on Friday however, today early morning the packages were missing f
-
Hi, i can't find mathematics operators such as , , exc. Is there a way to write them by keyboard without externals apps?
-
Dear all, I've a KM directory that have many files, so I need to filter this by date or a custom attribute, have some possibility to do it without use TREX? Best regards