Pass Array to Database Procedure
Hi,
I've a JSP in which I can collect the parameters as array. I, then, want to pass on this array to a database prodecure/function. How can I do that.
I already have tried Steve's ArrayOfStringDomain example. (ArrayOfStringDomain) and it didn't work.
Can someone please help me.
Thanks,
Jatinder
Hi Jatinder,
For information on passing an array to a stored procedure refer here.
Hope this helps.
Sujatha.
Similar Messages
-
How to pass ARRAY to Oracle Procedure
Hi
We are using BC4J with JSP in our project. We need to send an Array to the procedure.
Could somebody provide some info as how this can be achieved.A while back, I used a SQLJ client to call a Java (also SQLJ) stored procedure and I needed to pass an array of strings to the procedure. I did something like this:
Java Class that was loaded in DB:
public class MyClass
// method that the stored procedure uses
public static void CALL_DOSTUFF(String a,
oracle.sql.ARRAY b,
oracle.sql.ARRAY c)
String[] bb = (String[])b.getArray();
String[] cc = (String[])c.getArray();
doStuff(a,bb,cc);
public static void doStuff(String a,
String[] b,
String[] c)
// process the input
In the database I added the type:
create or replace type STR_ARRAY as table of varchar2(20);
and the procedure:
create or replace procedure CALL_DOSTUFF(a varchar2,
b STR_ARRAY,
c STR_ARRAY)
as
language java
name 'MyClass.CALL_DOSTUFF(java.lang.String,
oracle.sql.ARRAY,
oracle.sql.ARRAY)';
I then used jpub to publish a STR_ARRAY.java file. I compiled this and used it with my SQLJ client to call to the stored procedure. The STR_ARRAY constructor takes a String[], so you do something like this in the SQLJ client:
String x = "X";
String y = {"y1","y2"};
String z = {"z1","z2"};
STR_ARRAY y1 = new STR_ARRAY(y);
STR_ARRAY z1 = new STR_ARRAY(z);
#sql {CALL CALL_DOSTUFF(:x,:y1,:z1)};
Hope this helps. -
Passing array to the procedure in parameter
Hi
I tried the following code,
Where my aim is to split the comma separated values and insert into an array, and then pass that array to another procedure in a package
CREATE OR REPLACE PACKAGE PAK_SPLIT_TEST AS
PROCEDURE PROC_SPLIT(IN_LIST VARCHAR2) ;
END;
CREATE OR REPLACE PACKAGE PAK_SPLIT_TEST AS
PROCEDURE PROC_SPLIT(IN_LIST VARCHAR2) ;
END;
CREATE OR REPLACE PACKAGE PAK_SPLIT_TEST
AS
PROCEDURE PROC_SPLIT (IN_LIST VARCHAR2);
END;
CREATE OR REPLACE PACKAGE BODY PAK_SPLIT_TEST
AS
PROCEDURE PROC_REM_LIST (p_array l_data)
IS
BEGIN
FOR i IN 1 .. p_array.COUNT
LOOP
DBMS_OUTPUT.put_line (p_array (i));
END LOOP;
END;
PROCEDURE PROC_SPLIT (IN_LIST VARCHAR2)
IS
TYPE SPLIT_array IS TABLE OF VARCHAR2 (4000)
INDEX BY BINARY_INTEGER;
l_data SPLIT_array;
l_txt LONG := '100,200,300,400,500,600';
l_str LONG := IN_LIST || ',';
l_n NUMBER;
BEGIN
BEGIN
l_data.delete;
LOOP
l_n := INSTR (l_str, ',');
EXIT WHEN NVL (l_n, 0) = 0;
l_data (l_data.COUNT + 1) := SUBSTR (l_str, 1, l_n - 1);
l_str := SUBSTR (l_str, l_n + 1);
END LOOP;
PROC_REM_LIST (l_data);
END;
END;
SELECT *FROM USER_ERRORSI'm getting the following error at line no. 30
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
begin end function package pragma procedure formCould you please help me in this
Thanks,
SmileGive this a shot:
CREATE OR REPLACE PACKAGE BODY PAK_SPLIT_TEST
AS
TYPE SPLIT_array IS TABLE OF VARCHAR2 (4000)
INDEX BY BINARY_INTEGER;
PROCEDURE PROC_REM_LIST (p_array SPLIT_array)
IS
BEGIN
FOR i IN 1 .. p_array.COUNT
LOOP
DBMS_OUTPUT.put_line (p_array (i));
END LOOP;
END;
PROCEDURE PROC_SPLIT (IN_LIST VARCHAR2)
IS
l_data SPLIT_array;
l_txt LONG := '100,200,300,400,500,600';
l_str LONG := IN_LIST || ',';
l_n NUMBER;
BEGIN
BEGIN
l_data.delete;
LOOP
l_n := INSTR (l_str, ',');
EXIT WHEN NVL (l_n, 0) = 0;
l_data (l_data.COUNT + 1) := SUBSTR (l_str, 1, l_n - 1);
l_str := SUBSTR (l_str, l_n + 1);
END LOOP;
PROC_REM_LIST (l_data);
END;
END;
END pak_split_test;
/PROC_REM_LIST was expecting a PL/SQL type of L_DATA. You have not defined that type anywhere (e.g. in your package spec, body, or in SQL). I move the declaration from PROC_SPLIT to your package body and it compiles.
Hope this helps! -
Trying to pass array to stored procedure in a loop using bind variable
All,
I'm having trouble figuring out if I can do the following:
I have a stored procedure as follows:
create procedure enque_f826_utility_q (inpayload IN f826_utility_payload, msgid out RAW) is
enqopt dbms_aq.enqueue_options_t;
mprop dbms_aq.message_properties_t;
begin
dbms_aq.enqueue(queue_name=>'f826_utility_queue',
enqueue_options=>enqopt,
message_properties=>mprop,
payload=>inpayload,
msgid=>msgid);
end;
The above compiles cleanly.
The first parameter "inpayload" a database type something like the following:
create or replace type f826_utility_payload as object
2 (
3 YEAR NUMBER(4,0),
4 MONTH NUMBER(2,0),
83 MUSTHAVE CHAR(1)
84 );
I'd like to call the stored procedure enque_f826_utility_q in a loop passing to it
each time, new values in the inpayload parameter.
My questions are:
First, I'm not sure in php, how to construct the first parameter which is a database type.
Can I just make an associative array variable with the keys of the array the same as the columns of the database type shown above and then pass that array to the stored procedure?
Second, is it possible to parse a statement that calls the enque_f826_utility_q procedure using bind variables and then execute the call to the stored procedure in a loop passing new bind variables each time?
I've tried something like the following but it's not working:
$conn = oci_pconnect (....);
$stmt = "select * from f826_utility";
$stid = oci_parse($conn, $sqlstmt);
$r = oci_execute($stid, OCI_DEFAULT);
$row = array();
$msgid = "";
$enqstmt = "call enque_f826_utility_q(:RID,:MID)";
$enqstid = oci_parse($conn, $sqlstmt);
oci_bind_by_name($enqstid, ":RID", $row); /* line 57 */
oci_bind_by_name($enqstid, ":MID", $msgid);
while ($row = oci_fetch_array($stid, OCI_RETURN_NULLS+OCI_ASSOC))
++$rowcnt;
if (! oci_execute($enqstid)) /* line 65 */
echo "Error";
exit;
When I run this, I get the following:
PHP Notice: Array to string conversion in C:\Temp\enqueue_f826_utility.php on l
ine 57
Entering loop to process records from F826_UTIITY table
PHP Notice: Array to string conversion in C:\Temp\enqueue_f826_utility.php on l
ine 65
PHP Warning: oci_execute(): ORA-06553: PLS-306: wrong number or types of argume
nts in call to 'ENQUE_F826_UTILITY_Q' in C:\Temp\enqueue_f826_utility.php on lin
e 65
PHP Notice: Undefined variable: msgnum in C:\Temp\enqueue_f826_utility.php on l
ine 68
Error during oci_execute of statement select * from F826_UTILITY
Exiting!Thanks for the reply.
I took a look at this article. What it appears to describe is
a calling a stored procedure that takes a collection type which is an array.
Does anyone from Oracle know if I can pass other database type definitions to a stored procedure from PHP?
I have a type defined in my database similar to the following which is not
an array but a record of various fields. This type corresponds to a payload
of an advanced queue payload type. I have a stored procedure which will take as it's input, a payload type of this structure and then enqueue it to a queue.
So I want to be able to pass a database type similar to the following type definition from within PHP. Can anyone from Oracle verify whether or not this is possible?
create or replace type f826_utility_payload as object
YEAR NUMBER(4,0),
MONTH NUMBER(2,0),
UTILITY_ID NUMBER(10,0),
SUBMIT_FAIL_BY VARCHAR2(30),
MUSTHAVE CHAR(1)
); -
Pass array to oracle stored procedure
I have such a problem: I have to pass array to stored procedure, so I declare type:
create type tNumberArray as table of number
and create procedure:
create or replace procedure proc_1 (in_param in tNumberArray) as
.... BODY OF PROCEDURE ...
when I call this procedure from C# like this:
int []pParam = new int[3] {1,2,3};
OracleCommand cmd = new OracleCommand("proc_1", dbConn);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param14 = new OracleParameter("param", OracleDbType.Decimal);
param14.Value = pParam;
param14.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
param14.Size = 3;
param14.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param14);
cmd.ExecuteNonQuery();
an error occures. It say that there invalid number or type of parameters.
But when I declare both type and procedure in a package everything goes fine.
What is the matter? Did anybody have the same problem?Not I got next problem:
when I cannot pass parameter to stored procedure and get array fro it. In other words returning array from procedure and passing some input parameters to it does not word!
Does anybody know why it happens? -
How can i pass arrays in a procedure as IN parameter
for eg.
If I have a procedure which takes an input login id and a input status
procedure test(loginId IN varchar, status IN varchar)
-- the procedure does insert and update using the input login id and input status
Now, suppose i have a bunch of input login ids and a bunch of status, how can i pass the login id and status values as an array to the procedure instead of calling the procedure in a loop?This is best done using an object type and collection type, so you can make use of bulk SQL to perform the DML. I've given a short demo below:-
First your target table...
SQL> create table my_table ( id number, status varchar2(1) );
Table created.Now we create an object type ( this defines the record structure for your parameter ). We then create a nested table type (collection) based on this record structure:-
SQL> create type login_record_ot as object
2 ( id number
3 , status varchar2(1)
4 );
5 /
Type created.
SQL> create type login_records_ntt as table of login_record_ot;
2 /
Type created.Now a demo package with a procedure to insert the input collection into the target table. This uses the TABLE expression ( combined with CAST just in case you are on 8i )...
SQL> create package pkg as
2 procedure insert_records (
3 login_records_in in login_records_ntt
4 );
5 end pkg;
6 /
Package created.
SQL> create package body pkg as
2
3 procedure insert_records (
4 login_records_in in login_records_ntt
5 ) is
6 begin
7 insert into my_table ( id, status )
8 select x.id
9 , x.status
10 from table( cast( login_records_in as login_records_ntt )) x;
11 dbms_output.put_line( sql%rowcount || ' rows inserted.' );
12 end insert_records;
13
14 end pkg;
15 /
Package body created.Now to use it. I'll load a dummy variable with a collection of IDs/statuses and pass them to the pkg.insert_records procedure...
SQL> declare
2 some_records login_records_ntt := login_records_ntt(
3 login_record_ot( 1, 'X' ),
4 login_record_ot( 2, 'Y' ),
5 login_record_ot( 3, 'Z' ),
6 login_record_ot( 4, 'A' ),
7 login_record_ot( 5, 'B' )
8 );
9 begin
10 pkg.insert_records( some_records );
11 end;
12 /
5 rows inserted.
PL/SQL procedure successfully completed.
SQL>
SQL> select * from my_table;
ID S
1 X
2 Y
3 Z
4 A
5 BRegards
Adrian -
ARRAYS in stored procedures?
is it possible to have an ARRAY be passed as an In and/or Out
Parameter in a stored procedure call? if so then can someone
please show me how? (ie what do i register as the Out, etc.) or
do i have to use a resultset to access it?
nullArtie (guest) wrote:
: is it possible to have an ARRAY be passed as an In and/or Out
: Parameter in a stored procedure call? if so then can someone
: please show me how? (ie what do i register as the Out, etc.)
or
: do i have to use a resultset to access it?
Yes u can pass array to a procedure.
I have created a package that stores the array
definition, and the procedure by name abc which takes an array as
out parameter (script proc1.sql)
and the second script proc2.sql calls the procedure abc and
prints some result
/*File proc1.sql*/
/*IT creates the package T with the definition of array
and passes to the procedure*/
CREATE OR REPLACE PACKAGE T as
TYPE arr_type is table of number index by binary_integer;
test_array arr_type;
END;
CREATE OR REPLACE PROCEDURE abc(t OUT T.arr_type ) IS
begin
for i in 1..10
loop
t(i) := i ;
end loop;
end abc;
/*End of Program proc1.sql*/
/*Program proc2.sql*/
/*This file calls the procedure abc and prints the result*/
declare
test_array T.arr_type;
begin
abc(test_array);
for i in 1..10 loop
dbms_output.put_line('Result ' -
Passing Arrays of User Defined Types to Oracle Stored Procedures
Hi
I am using WebLogic 8.14 & Oracle 9i with thin JDBC driver.
Our application needs to perform the same DB operation for every item in a Java Collection. I cannot acheive the required performance using the standard Prepare & Execute loop and so I am looking to push the whole collection to Oracle in a single invocation of a Stored Procedure and then loop on the database.
Summary of Approach:
In the Oracle database, we have defined a Object Type :
CREATE OR REPLACE
TYPE MYTYPE AS OBJECT
TxnId VARCHAR2(40),
Target VARCHAR2(20),
Source VARCHAR2(20),
Param1 VARCHAR2(2048),
Param2 VARCHAR2(2048),
Param3 VARCHAR2(2048),
Param4 VARCHAR2(2048),
Param5 VARCHAR2(2048),
and we have defined a collection of these as:
CREATE OR REPLACE
TYPE MYTYPE_COLLECTION AS VARRAY (100) OF MYTYPE
There is a stored procedure which takes one of these collections as an input parameter and I need to invoke these from within my code.
I am having major problems when I attempt to get the ArrayDescriptor etc to allow me to create an Array to pass to the stored procedure. I think this is because the underlying Oracle connection is wrapped by WebLogic.
Has anyone managed to pass an array to an Oracle Stored procedure on a pooled DB connection?
Thanks
AndyAndy Bowes wrote:
Hi
I am using WebLogic 8.14 & Oracle 9i with thin JDBC driver.
Our application needs to perform the same DB operation for every item in a Java Collection. I cannot acheive the required performance using the standard Prepare & Execute loop and so I am looking to push the whole collection to Oracle in a single invocation of a Stored Procedure and then loop on the database.
Summary of Approach:
In the Oracle database, we have defined a Object Type :
CREATE OR REPLACE
TYPE MYTYPE AS OBJECT
TxnId VARCHAR2(40),
Target VARCHAR2(20),
Source VARCHAR2(20),
Param1 VARCHAR2(2048),
Param2 VARCHAR2(2048),
Param3 VARCHAR2(2048),
Param4 VARCHAR2(2048),
Param5 VARCHAR2(2048),
and we have defined a collection of these as:
CREATE OR REPLACE
TYPE MYTYPE_COLLECTION AS VARRAY (100) OF MYTYPE
There is a stored procedure which takes one of these collections as an input parameter and I need to invoke these from within my code.
I am having major problems when I attempt to get the ArrayDescriptor etc to allow me to create an Array to pass to the stored procedure. I think this is because the underlying Oracle connection is wrapped by WebLogic.
Has anyone managed to pass an array to an Oracle Stored procedure on a pooled DB connection?
Thanks
AndyHi. Here's what I suggest: First please get the JDBC you want to work in a
small standalone program that uses the Oracle thin driver directly. Once
that works, show me the JDBC code, and I will see what translation if
any is needed to make it work with WLS. Will your code be running in
WebLogic, or in an external client talking to WebLogic?
Also, have you tried the executeBatch() methods to see if you can
get the performance you want via batches?
Joe -
URGENT: Passing Array from JSP to a Stored Procedure
Hi,
Can some one please help me understanding how can I pass array from JSP page to a stored procedure in database.
Thanks in advance.
JatinderThanks.
I tried ArrayExampla.java and was successful in passing array values to the stored database procedure.
How can I use this class in JSP? Like I have first JSP where in I will collect input from the user and then submit it to the second JSP - that needs to call the ArrayExample.java to pass the values as array to the database.
How should I call this java code in my second JSP?
Thanks in advance. -
Passing Array of java objects to and from oracle database-Complete Example
Hi all ,
I am posting a working example of Passing Array of java objects to and from oracle database . I have struggled a lot to get it working and since finally its working , postinmg it here so that it coudl be helpful to the rest of the folks.
First thinsg first
i) Create a Java Value Object which you want to pass .
create or replace and compile java source named Person as
import java.sql.*;
import java.io.*;
public class Person implements SQLData
private String sql_type = "PERSON_T";
public int person_id;
public String person_name;
public Person () {}
public String getSQLTypeName() throws SQLException { return sql_type; }
public void readSQL(SQLInput stream, String typeName) throws SQLException
sql_type = typeName;
person_id = stream.readInt();
person_name = stream.readString();
public void writeSQL(SQLOutput stream) throws SQLException
stream.writeInt (person_id);
stream.writeString (person_name);
ii) Once you created a Java class compile this class in sql plus. Just Copy paste and run it in SQL .
you should see a message called "Java created."
iii) Now create your object Types
CREATE TYPE person_t AS OBJECT
EXTERNAL NAME 'Person' LANGUAGE JAVA
USING SQLData (
person_id NUMBER(9) EXTERNAL NAME 'person_id',
person_name VARCHAR2(30) EXTERNAL NAME 'person_name'
iv) Now create a table of Objects
CREATE TYPE person_tab IS TABLE OF person_t;
v) Now create your procedure . Ensure that you create dummy table called "person_test" for loggiing values.
create or replace
procedure give_me_an_array( p_array in person_tab,p_arrayout out person_tab)
as
l_person_id Number;
l_person_name Varchar2(200);
l_person person_t;
l_p_arrayout person_tab;
errm Varchar2(2000);
begin
l_p_arrayout := person_tab();
for i in 1 .. p_array.count
loop
l_p_arrayout.extend;
insert into person_test values(p_array(i).person_id, 'in Record '||p_array(i).person_name);
l_person_id := p_array(i).person_id;
l_person_name := p_array(i).person_name;
l_person := person_t(null,null);
l_person.person_id := l_person_id + 5;
l_person.person_name := 'Out Record ' ||l_person_name ;
l_p_arrayout(i) := l_person;
end loop;
p_arrayout := l_p_arrayout;
l_person_id := p_arrayout.count;
for i in 1 .. p_arrayout.count
loop
insert into person_test values(l_person_id, p_arrayout(i).person_name);
end loop;
commit;
EXCEPTION WHEN OTHERS THEN
errm := SQLERRM;
insert into person_test values(-1, errm);
commit;
end;
vi) Now finally create your java class which will invoke the pl/sql procedure and get the updated value array and then display it on your screen>Alternatively you can also check the "person_test" tbale
import java.util.Date;
import java.io.*;
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class ArrayDemo
public static void passArray() throws SQLException
Connection conn = getConnection();
ArrayDemo a = new ArrayDemo();
Person pn1 = new Person();
pn1.person_id = 1;
pn1.person_name = "SunilKumar";
Person pn2 = new Person();
pn2.person_id = 2;
pn2.person_name = "Superb";
Person pn3 = new Person();
pn3.person_id = 31;
pn3.person_name = "Outstanding";
Person[] P_arr = {pn1, pn2, pn3};
Person[] P_arr_out = new Person[3];
ArrayDescriptor descriptor =
ArrayDescriptor.createDescriptor( "PERSON_TAB", conn );
ARRAY array_to_pass =
new ARRAY( descriptor, conn, P_arr);
OracleCallableStatement ps =
(OracleCallableStatement )conn.prepareCall
( "begin give_me_an_array(?,?); end;" );
ps.setARRAY( 1, array_to_pass );
ps.registerOutParameter( 2, OracleTypes.ARRAY,"PERSON_TAB" );
ps.execute();
oracle.sql.ARRAY returnArray = (oracle.sql.ARRAY)ps.getArray(2);
Object[] personDetails = (Object[]) returnArray.getArray();
Person person_record = new Person();
for (int i = 0; i < personDetails.length; i++) {
person_record = (Person)personDetails;
System.out.println( "row " + i + " = '" + person_record.person_name +"'" );
public static void main (String args[]){
try
ArrayDemo tfc = new ArrayDemo();
tfc.passArray();
catch(Exception e) {
e.printStackTrace();
public static Connection getConnection() {
try
Class.forName ("oracle.jdbc.OracleDriver");
return DriverManager.getConnection("jdbc:oracle:thin:@<<HostNanem>>:1523:VIS",
"username", "password");
catch(Exception SQLe) {
System.out.println("IN EXCEPTION BLOCK ");
return null;
and thats it. you are done.
Hope it atleast helps people to get started. Comments are appreciated. I can be reached at ([email protected]) or [email protected]
Thanks
Sunil.sHi Sunil,
I've a similar situation where I'm trying to insert Java objects in db using bulk insert. My issue is with performance for which I've created a new thread.
http://forum.java.sun.com/thread.jspa?threadID=5270260&tstart=30
I ran into your code and looked into it. You've used the Person object array and directly passing it to the oracle.sql.ARRAY constructor. Just curios if this works, cos my understanding is that you need to create a oracle.sql.STRUCT out of ur java object collection and pass it to the ARRAY constructor. I tried ur way but got this runtime exception.
java.sql.SQLException: Fail to convert to internal representation: JavaBulkInsertNew$Option@10bbf9e
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.oracore.OracleTypeADT.toDatum(OracleTypeADT.java:239)
at oracle.jdbc.oracore.OracleTypeADT.toDatumArray(OracleTypeADT.java:274)
at oracle.jdbc.oracore.OracleTypeUPT.toDatumArray(OracleTypeUPT.java:115)
at oracle.sql.ArrayDescriptor.toOracleArray(ArrayDescriptor.java:1314)
at oracle.sql.ARRAY.<init>(ARRAY.java:152)
at JavaBulkInsertNew.main(JavaBulkInsertNew.java:76)
Here's a code snippet I used :
Object optionVal[] = {optionArr[0]}; // optionArr[0] is an Option object which has three properties
oracle.sql.ArrayDescriptor empArrayDescriptor = oracle.sql.ArrayDescriptor.createDescriptor("TT_EMP_TEST",conn);
ARRAY empArray = new ARRAY(empArrayDescriptor,conn,optionVal);If you visit my thread, u'll see that I'm using STRUCT and then pass it to the ARRAY constructor, which works well, except for the performance issue.
I'll appreciate if you can provide some information.
Regards,
Shamik -
Passing array to Procedure in 8i
I am trying to pass array to a database procedure without any luck yet.
Error i get is unable to bind to specified type .
any suggestions are greatly appreciated i have been trying for 2 days without luck !!Oracle JDBC drivers support SQL Varray and Nested Table datatypes. To bind a array data, use OracleCallableStatement::setARRAY.
Thanks. -
Passing array parameters to Stored procedure
Hi,
I need to call a procedure repeatedly with different set of parameters. Instead To do this, I can form a parameter arrays and pass it to the procedure. This is working fine with Oracle 8.1.7 database and Oracle 8.1.7 odbc driver.
Is there any difference in the way 8.1.6 Oracle ODBC driver behave? When we use the same code with 8.1.6 ODBC driver (with either 8.1.6 database or 8.1.7 database), and pass an array of n elements to the stored procedure, first elemet in the array is processed correctly and for the remaining n-1 times the same value is getting used (which leades to a unique constraint violation since procedure in this case does an insert). Soem of our clients are on 8.1.6 and so we need to get this working on it too.
Also are you aware if Microsoft ODBC driver implements this correctly. When we traced with ODBC trace, it was executing the procedure n times one after the other thereby simulating the effect but poor performance. (MDAC 2.6).
Is there any extra settings to be done?
Thanks
SreeHi Justin,
When I installed 8.1.6.6 ODBC driver this problem went off, but I recieved another problem.
I am getting
"ORA-01460 unimplemented or unreasonable conversion requested"
on execution of some procedures with parameter arrays. They work fine with 8.1.7.0.
Any idea? Is it suggested that I use 8.1.7 ODBC driver with 8.1.6 server/client? Will it create some other problem?
Thanks
Sree -
How to pass value in array to another procedure?
Hello.
I have created application by Developer form9i.
And I have some problem about passing value in array to another procedure.
My code is :
PROCEDURE p_add_array (col_no in number,
col_val in varchar2) IS
type xrecord is record(col number,vcol varchar2(1000));
xrec xrecord;
type varraytype is varying array(42) of xrecord;
xvartab varraytype := varraytype();
alert number;
BEGIN
set_application_property(cursor_style,'busy');
xrec.col := col_no;
xrec.vcol := col_val;
xvartab.extend(1);
xvartab(col) := xrec;
EXCEPTION
when others then
set_application_property(cursor_style,'default');
alert := f_show_alert('!Error ORA-'||
to_char(DBMS_ERROR_CODE)||' '||
substr(DBMS_ERROR_TEXT,1,240),
'al_stop');
END;
And I want to have
PROCEDURE p_print_arrey is
BEGIN
END;
So how to bring value of xvartab( ) in p_add_array to use in p_print_array?
Anybody please help me solve this ploblem.Hi,
Instead of declaring the array locally within the procedure (i.e. p_add_array), define it in the package specification (i.e. Under Program Units).
-- Shailender Mehta -- -
CAN I PASS FORM VARIABLES TO THE DATABASE PROCEDURE IN PERSONALIZATION
When I try to use form variable in the database procedure call from personalization I get the attached error.
Under forms personalization
From Actions tab --> builtin --> Execute Procedure when I call a database procedure and pass one of the form variable as parameter I get "ora-01008 couldn't be validate" error
Can we pass on form variables to the database package using personalization ? If yes, then is this the right way?
Message was edited by:
omitchelI tried customizing the Quoting Form, it works.
What you have done is correct, but this is how you call it
='begin
db_proc('''||${item.qothddet_main.quote_name.value}||''');
end'
here
qothddet_main : block name
quote_name : item name
Thanks
Tapash -
Passing variables to a procedure inside a database trigger
Hi, I am new to oracle Forms . I am having a table in database . For that table i had written a database trigger which will fire after insert or update . I am using a procedure inside the Trigger . I want to pass arguments to the procedure which is being called in the trigger . The variables which i want to pass to the procedure are one is a primary key and the other is a normal cloumn which are in the same table for which the trigger is written. Can anybody help me regarding this.?
> But when i m calling it with forms i m getting an error
You cannot call a database trigger from forms. A trigger is part of the table, e.g.:
create trigger my_trigger
before insert or update or delete on my_table
for each row
Maybe you are looking for
-
This may be the wrong forum as I am not trying to burn or create a DVD, just play regular movies. The quality is atrocious. I can barely see the movie, it's all dark and cartoonish. Also, videos on YouTube are virtually unwatchable. Overall, the imag
-
Comparisons of Duration, Date and Time Values
Hello, Is there way to simulate support for XPath 2.0 date/time comparison functions? (can I create a module to replace currently available XPath functions with my own?) Are there plans to fully support those functions? For example: func-date-less-th
-
Migrating Dimension Server from local installation to High Availability
Hi Team, When Hyperion was installed on the client site (11.1.2.3), there was no requirement for EPMA to become highly available. Now that has become a requirement to make it highly available in the event that one of the virtual machine is unreachabl
-
i ordered a new phone, 5s, a few days ago. the rep i was on the phone with told me it would be shipped overnight. its been 5 days and i have yet to receive an email or anything about my phone. no money has been taken out of my bank account either. wh
-
DB 11.1.0.7 HP Ux We need to move the Voting/OCR which are on raw disk to new storage raw disks. Currently we have Soft link fronm all the nodes pointing to the shared voting and ocr raw disks. The current plan is to Shut CRS, and Backup the Voting a