use the stored procedure VARIABLE in an ODI procedure
HelloI have a stored procedure that takes custId as an input parameter and returns the age as output parameter.
custId is a varaible ODI that we spend during execution.
I want to insert the age value in a table.
declare
cust_age customer_details.age%type;
Start
FETCH_CUSTOMER_DATA(#Customer.CustomerID,cust_age);
end;
INSERT INTO CUSTOMER_AGE VALUES(#customerid,*cust_age*)
Thank you.
Hello
Just use the insert in an ODI procedure in an anonymous pl/sql block.
I mean:
declare
cust_age customer_details.age%type;
Start
FETCH_CUSTOMER_DATA(#Customer.CustomerID,cust_age);
INSERT INTO CUSTOMER_AGE VALUES(#customerid,*cust_age*);
end;
Ok?
Cezar Santos
http://odiexperts.com
Tags: Business Intelligence
Similar Questions
-
Use the stored procedure to create the data model for the bi publisher report
Hi all
Can we use stored procedure to create the data model for BI Publisher reports? I did find an example by using the stored procedure to complete the data model in the bi publisher report.
Thank you
ViratCheck out these links
BI publisher to use the stored procedure
Re: Stored procedures and dynamic columns
Re: Is it possible to use stored procedures in BI Publisher GUI?
Re: PL/SQL stored w / model XML?If brand pls help
-
Cross-Schema insert by using the stored procedure
Hi all.
I am currently migrating 11.2.0.1 to 11.2.0.3,
and I have to deal with an unexpected privileges error "ORA-13199: insufficient privilege for the table in the application of the xxx model."
While inserting triplets in the table in the application of the model
using a stored procedure which is
owned by the owner of model table and app,
but called by another issued user.
There has never been a problem 10.2.0.4 or 11.2.0.1.
It seems that something has really changed, (perhaps an authid pragma or something like this in the code internal SDO_RDF_TRIPLE?)
The two users are needed on my system for security policy reasons.
Here's a simplified script to reproduce the success on 1.2.0.1 and error on 11.2.0.3.
Users are: ADMWAT = model, USEWAT = calling application
SQL > connect SYS/xxxxx@DB_*11201*.world as sysdba
Connected.
SQL > select value of MDSYS. RDF_PARAMETER where namespace = "MDSYS" and the attribute = "SEM_VERSION";
VALUE
--------------------------------------------------------------------------------
* 112 *.
SQL >
SQL > connect ADMWAT/xxxxx@DB_11201.world
Connected.
SQL > CREATE TABLE family_rdf_data (id NUMBER, triple SDO_RDF_TRIPLE_S);
Table created.
SQL >
SQL > exec SEM_APIS.create_rdf_model ('family', 'family_rdf_data', 'three');
PL/SQL procedure successfully completed.
SQL >
SQL > GRANT INSERT ON family_rdf_data in MDSYS.
Grant succeeded.
SQL >
SQL > create or replace PROCEDURE NEW_TRIPLE IS
BEGIN 2
3 INSERT INTO family_rdf_data VALUES (1,
4 SDO_RDF_TRIPLE_S ('family',
5 "http://www.example.org/family/John."
6 "http://www.example.org/family/fatherOf."
7 'http://www.example.org/family/Suzie'));
8 END;
9.
Created procedure.
SQL >
SQL > GRANT EXECUTE ON NEW_TRIPLE to USEWAT;
Grant succeeded.
SQL >
SQL > connect ADMWAT/xxxxx@DB_11201.world
Connected.
SQL > exec ADMWAT. NEW_TRIPLE();
PL/SQL procedure successfully completed.
SQL > rollback;
Complete restoration.
SQL >
SQL > connect USEWAT/xxxxx@DB_11201.world
Connected.
SQL > exec ADMWAT. NEW_TRIPLE();
PL/SQL procedure successfully complete.
SQL >
SQL >
SQL >
************************************************************************************************************
************************************************************************************************************
************************************************************************************************************
SQL > connect SYS/xxxxx@DB_*11203*.world as sysdba
Connected.
SQL > select value of MDSYS. RDF_PARAMETER where namespace = "MDSYS" and the attribute = "SEM_VERSION";
VALUE
--------------------------------------------------------------------------------
* 11203 *.
SQL >
SQL > connect ADMWAT/xxxxx@DB_11203.world
Connected.
SQL >
SQL > CREATE TABLE family_rdf_data (id NUMBER, triple SDO_RDF_TRIPLE_S);
Table created.
SQL >
SQL > exec SEM_APIS.create_rdf_model ('family', 'family_rdf_data', 'three');
PL/SQL procedure successfully completed.
SQL >
SQL > GRANT INSERT ON family_rdf_data in MDSYS.
Grant succeeded.
SQL >
SQL > create or replace PROCEDURE NEW_TRIPLE IS
BEGIN 2
3 INSERT INTO family_rdf_data VALUES (1,
4 SDO_RDF_TRIPLE_S ('family',
5 "http://www.example.org/family/John."
6 "http://www.example.org/family/fatherOf."
7 'http://www.example.org/family/Suzie'));
8 END;
9.
Created procedure.
SQL >
SQL > GRANT EXECUTE ON NEW_TRIPLE to USEWAT;
Grant succeeded.
SQL >
SQL > connect ADMWAT/xxxxx@DB_11203.world
Connected.
SQL > exec ADMWAT. NEW_TRIPLE();
PL/SQL procedure successfully completed.
SQL > rollback;
Complete restoration.
SQL >
SQL > connect USEWAT/xxxxx@DB_11203.world
Connected.
SQL > exec ADMWAT. NEW_TRIPLE();
BEGIN ADMWAT. NEW_TRIPLE(); END;
*
ERROR on line 1:
ORA-55303: SDO_RDF_TRIPLE_S constructor failed:
SQLERRM = ORA-13199: insufficient privilege for the application of the model family table [
ORA-06512: at the 'MDSYS. MD", line 1723
ORA-06512: at the 'MDSYS. MDERR", line 17
ORA-06512: at the 'MDSYS. SDO_RDF_TRIPLE_S', line 41
]
ORA-06512: at the 'MDSYS. MD", line 1723
ORA-06512: at the 'MDSYS. MDERR", line 17
ORA-06512: at the 'MDSYS. SDO_RDF_TRIPLE_S', line 68
ORA-06512: at "ADMWAT. NEW_TRIPLE', line 3
ORA-06512: at line 1
SQL >
Published by: damien.claveau on March 26, 2012 02:02Damien,
Please submit a Service request for this issue in Support of Oracle.
Meanwhile, until a patch will be available, another possible solution, you could consider to use is to grant the DBA role to ADMWAT.
If you want, please contact me directly by email: souripriya das at oracle dot com dot
Thank you
-Smiled. -
We use the procedure attached to within an ASP application obfuscation of the password database. I am able to use the same procedure in CF without modification? Right now, I have tried with cfstoredproc but'm "Procedure 'dt_External_Encrypt' expects parameter '@Encrypted', which was not supplied."
You do not use the ODBC driver.
Most likely, there is a typing error in the code or the stored procedure is not also displayed (or a copy).
Change procedure = "dt_External_Encrypt" to procedure = "dbo.dt_External_Encrypt" "
Open Query Analyzer, 'Edit' code stored procedure and make sure that it is really such displayed.
Finally, try changing returnCode 'no '.
If all else fails, join the code exact CF code and code from Query Analyzer.
-
Using the stored procedure: Source does not have a target executable
I'm a guy from MS - SQL, so I'm fairly familiar with T - SQL syntax, but feels a heck of a time trying to take the code I wrote for SQL and turn this works with Oracle.
in any case, I'm using Oracle SQL Developer, and I have a stored procedure that calls the Alter Table statement and adds a column. Just trying to get this one to work before moving on to the other that I have. I get the message that source does not have a target executable when I try to run this command.
create or replace PROCEDURE rta_conv_addcolumn (rtatablename1 in varchar (20),)
rtatablename2 in varchar (20),
rtacolumnname in varchar (256),
rtacolumninfo in varchar (256))
AS
DECLARE rtasql VARCHAR (4000);
BEGIN
IF EXISTS (SELECT * from user_tables WHERE table_name = rtatablename1)
AND NOT EXISTS (SELECT * from user_tab_columns WHERE column_name = rtacolumnname)
AND table_name = rtatablename1)
AND NOT EXISTS (SELECT * from user_tab_columns WHERE column_name = rtacolumnname)
AND table_name = rtatablename2)
Then rtasql: = ' ALTER TABLE ["+ rtatablename2 +"] ADD "+ rtacolumnname +" "+ rtacolumninfo;
Run (rtasql);
END rta_conv_addcolumn;
If I try to compile I get the following messages, which make no sense, since the syntax I use to declare the input variables seems to be good.
Error (1.54): PLS-00103: encountered the symbol "(" quand attend une deles de valeurs suivantes:: =.), @ default % of the characters of the symbol ': = ' has been replaced by "(" pour continuer.)
Error (2.29): PLS-00103: encountered the symbol "(" quand attend une deles de valeurs suivantes:: =.), @ default % of the characters of the symbol ': = ' has been replaced by "(" pour continuer.)
Error (3.29): PLS-00103: encountered the symbol "(" quand attend une deles de valeurs suivantes:: =.), @ default % of the characters of the symbol ': = ' has been replaced by "(" pour continuer.)
Error (4.29): PLS-00103: encountered the symbol "(" quand attend une deles de valeurs suivantes:: =.), @ default % of the characters of the symbol ': = ' has been replaced by "(" pour continuer.)
Error (6.1): PLS-00103: encountered the symbol "DECLARE" when expecting one of the following: begin function package pragma procedure < an ID > subtype type use < a between double quote delimited identifiers of > form current cursor external language the symbol 'start' is substituted for 'SAID' continue.
Error (15.5): PLS-00103: encountered the symbol "RTA_CONV_ADDCOLUMN" when expects it one of the following values: IfAdds the column to the table specified in rtatablename1, if there is neither rtatablename1 nor rtatablename2.
NOT TESTED
create or replace PROCEDURE rta_conv_addcolumn(rtatablename1 in varchar, rtatablename2 in varchar, rtacolumnname in varchar, rtacolumninfo in varchar) AS rtasql VARCHAR(4000); count1 number; count2 number; count3 number; BEGIN SELECT count(*) into count1 FROM user_tables WHERE table_name = rtatablename1; SELECT count(*) into count2 FROM user_tab_columns WHERE column_name = rtacolumnname AND table_name = rtatablename1; SELECT count(*) into count3 FROM user_tab_columns WHERE column_name = rtacolumnname AND table_name = rtatablename2; IF count1>0 AND count2 = 0 AND count3=0 Then rtasql:= 'ALTER TABLE '|| rtatablename1 ||'ADD ' || rtacolumnname || ' ' || rtacolumninfo; Execute immediate rtasql; END IF; END rta_conv_addcolumn; /
Max
Published by: Massimo Ruocchio, December 12, 2009 02:15
Missing AND -
selection of lines by using the stored procedure
All the
At the risk of asking something obvious, I would like to know if it is possible to wrap a selection within a stored procedure.
Create the abc as procedure
Start
date of b;
Select sysdate into double b;
end;
/
Question: I have a select complex which should be called from JAVA. I don't want to create a VIEW since at the request of the view, indeed I will do so: SELECT * FROM (my original query) which leads to performance.
I would like to be able to:
exec has;
This should give me the result of
SELECT
x, z, c
Of
one
;
How can I make this possible a stored procedure?
Thank you
Well, yes there are ways to do it, but first of all, you are mistaken in thinking that select * from
, would lead to a performance overhead. The optimizer based on CSSTidy will optimize the request to provide results without worrying so there is no noticeable performance difference. Java, you probably want to use a ref cursor and get java to retrieve the results back.
Example of refcursor function (demonstrated SQL * more I don't have Java)...
SQL > create or replace function test RETURN as sys_refcursor
cur_o 2 sys_refcursor;
3. start
4. open cur_o to select empno, ename from emp;
5 return cur_o;
6 end;
7.The function is created.
SQL > var r refcursor;
SQL > exec: r: = test();PL/SQL procedure successfully completed.
SQL > print r;
EMPNO, ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
KING 7839
7844 TURNER
7876 ADAMS
JAMES 7900
7902 FORD
7934 MILLER14 selected lines.
-
Problem to INSERT INTO using the stored procedure in 10g
I use a 10g R2 database.
I created two tables as follows:
SQL > create table t1 (c1 varchar2 (1), number (1) c2, c3 number (1);)
SQL > create table t2 (deptid varchar2 (4), empid varchar (4), varchar2 (1) c1, c2 number (1) c3 number (1);)
insert into t1 values ('A', 3, 5);
insert into t1 values ('B', 5, 5);
insert into t1 values ('C', 5, 5);
I want to create a stored procedure to insert data into table t1 t2 and certain parameters of the procedure.
Is this possible?
As an example:
SQL > execute test (1,2)
This procedure will be insert these two parameters in table t2 AND select rows in table t1 and insert into table t2 at the same time.
How can I write the procedure?
Tip:
SQL > create or replace procedure
(v_deptid, v_empid number)
is
BEGIN
Insert into t2 (deptid, empid, c1, c2, c3)
... Select c1, c2, c3 from t1;
end;
My question is: How can I insert the v_deptid and v_empid parameters at the same time?Try
SQL > create or replace procedure
(v_deptid, v_empid number)
is
BEGIN
Insert into t2 (deptid, empid, c1, c2, c3)
Select v_deptid, v_empid, c1, c2, c3 to t1;
end; -
by using the stored procedure in sql statement?
I have the following sample tables:
project id project name
====== ===============
1 project one
2 two project
3 three of the project
employee_id fname lname
=========== ============= =====
Amy 100a
Better B 200
Carrie 300 C
project number
=========== ===========
1,200 people
2 300
of 3 100
There's a getFullname (empployee_id) of the procedure in place that combines the fname lname full name
what I need to accomplish is the following.
project is created by employee
==============================
project a is created by better b
two project is created by carrie C
three project is created by amy A
but the rule is: you need to call the getFullName (employee_id) procedure to perform the above task and do not use join tables to get the employee full nameI suspect that you want something along the lines of
SELECT 'Project ' || p.project_name || ' was created by ' || get_full_name( pe.employee_id ) FROM project p, project_employee pe WHERE p.project_id = pe.project_id
If you need other attributes in the employee table, you can join at the table of the employees as well.
Justin
-
Maximum number of parameters sent to the stored procedure
I have a web form where I insert data in Oracle. There are at least 20 fields on the form. For the INSERT, I want to use the stored procedure. But in this case for the section of the VALUES in the INSERT statement, I need to send that many - in this case 20 settings. Is it normal for a procedure to receive 20 parameters? If this isn't the case, then should how I follow to do? I know that technically there is only no problem but isn't normal programming or database managementwise? I think it's the basic thing any developer web do it all the time.Is it normal for a procedure to receive 20 parameters?
Sure. It is very good.
But what is normal programming or database managementwise
If you need to insert values for 20 fields then normal.
-
can I export and import my database to oracle via the stored procedure?
Hi all
I need to export my database using the stored procedure, the stored procedure is called by the java application and it works well
Now I still get the "ULTIMATE QUESTION", could export and import the database using the stored procedure?
Really thanks for the reply.
Kind regards
KahlilHello
I think you can use DBMS_DATAPUMP (10.1 +), see [DBMS_DATAPUMP | http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_datpmp.htm#i1007277], for examples, see [http://www.psoug.org/reference/dbms_datapump.html]
Kind regards
-
Hello
I have a problem to transfer content to an XML file in a MS SQL database through a stored procedure data/fixed. I am able to transfer the content of the file using method...
HSTMT = DBPrepareSQL (hdbc, EXEC usp_InsertReport "
... ");resCode = DBExecutePreparedSQL (hstmt);
resCode = DBClosePreparedSQL (hstmt);
... but in this case, I am not able to read the return value of the stored procedure.
I tried to follow the example of the stored procedure in the help documentation (DBPrepareSQL), but I miss a xml data type?
No idea how to solve my problem?
Cake of KR
DianaS salvation,
Thanks for your comments. During this time I found another way which fullfill my needs:
resCode = DBSetAttributeDefault (hdbc, ATTR_DB_COMMAND_TYPE, DB_COMMAND_TEXT);
sprintf (sz_SqlStatement, "DECLARE @TESTID INT EXEC @TESTID = usp_InsertReport ' SELECT 'RetVal' %s = @TESTID", sz_Buffer ");
HSTMT = DBActivateSQL (hdbc, sz_SqlStatement);While ((resCode = DBFetchNext (hstmt)) == DB_SUCCESS)
{
/ * Enter values in the record. */
resCode = DBGetColInt (hstmt, 1, & s32_TestId);
}resCode = DBDeactivateSQL (hstmt);
sz_Buffer is the content of the XML file.
Cake of KR
-
user_table should be used in the stored procedure.
Hello
I want to find my permanent table user_tables and then drop and recreate it,
I can use this user_tables in my stored procedure for above purpose or is there any notice that must be used.
SP is admin sp, used to run in offline mode.
yorus truly
Published by: 944768 on 10 February 2013 23:44
Published by: 944768 on 10 February 2013 23:44944768 wrote:
but I wanted to know that can I use user_table in above proc stored to conclude and then drop and create it when Everitt runs?Oracle manages two "flavors" of the stored procedure - copyright and rights of the Summoner. Rights of the DEFINER (default) is always performed under stored security area of the owner of the procedure no matter who calls it. So, if you ask USER_TABLES (or any display USER_, besides) within DEFINER rights stored procedure, you will get a list of tables owned by the owner of the stored procedure, not stored calling procedure. Rights (AUTHID CURRENT_USER) stored Invoker procedure is always carried out under the domain of the calller security. Therefore, if you are querying USER_TABLES (or any display USER_, besides) within the Summoner rights stored procedure you will get a list of tables belonging to the appellant a stored procedure. Hope it answers your question.
SY.
-
Link to database not be created using a stored procedure
Hello
I am creating a link of database using a stored procedure.
Here is the code for it
CREATE OR REPLACE PROCEDURE create_db_link (ca_db_name IN VARCHAR2,
ca_service_name IN VARCHAR2)
AUTHID CURRENT_USER IS
BEGIN
EXECUTE IMMEDIATE ' create public database link test_db_link connect to ca_db_name identified by ca_db_name using "ca_service_name" ';
END create_db_link;
During execution of the code is created the db_link. But, when I ask all_db_links I get the following result.
OWNER
------------------------------
DB_LINK
--------------------------------------------------------------------------------
USERNAME
------------------------------
HOST
--------------------------------------------------------------------------------
CREATED
---------
PUBLIC
TEST_DB_LINK. WORLD
CA_DB_NAME
ca_service_name
20 Aug 13
Could you please help me understand why it shows the parameter names in the name column of the USER and the HOST instead of the name of the database and the name of the service?
This is to show exactly what you said to do.
Did you expect that Oracle would read as if by magic through your string you passed to run immediately and magically know to replace all occurrences of the string that correspond to local (or even global) parameter/variable names with the values of these variables? It does not work like that. You could concatenate the values into the string.
for example
EXECUTE IMMEDIATE ' create public database link test_db_link connect to ' | ca_db_name |' identified by ' | ca_db_name: ' using the "' | ca_service_name | " ' ;
But why are create you database links running? Shouldn't this be part of the design of your application and the initial fact before the application runs?
-
Call the stored procedure, and bind parameters by name
Hello
I use the Oracle ODBC 12 c driver to pass values from one Interface to our database Oracle 11.2. The Interface software collects data from modbus protocoll and calls a stored procedure. Right now my syntax to call the stored procedure looks like this:
CALL procedure-name ('STRING', 'Timestamp as String', numValue1);
It works very well. Now, I have to add a default setting to my procedure. To stay flexible to make other changes, I want to call the procedure and bind the parameters by name. Release 10.2.0.1.0 ISC ODBC Notes:
Added support for the named parameter, binding the parameters by name. ODBC Oracle driver now allows the application to specify the parameters of a stored procedure by name, in the procedure call. Named parameters are to be used in calls to stored procedures and should not be used in other SQL statements.
So, it shouldn't be a problem to use named notation, but how do I do this in ODBC? I tried like this, but oracle returns an ora-00936 error of missing expression:
call procedure-name (paramName1 = > 'STRING',= paramName2 > 'Timestamp as String',paramName3 = > numValue1).
Thank you for your help.
Finally, I was able to find the error. The syntax of the statement was very good. The problem was caused by another declaration that I edited before and the error has not attracted Attention immediately.
Thanks for reading and looking for an answer.
-
Logic of tip insert - using a stored procedure?
Here's my use case:
- I have a table called TAGS that has two columns: id (number key, primary) and text (string)
- the table has a constraint of database set that each text must be unique
- the table also has a fixed sequence back next id available
- I created an entity of the DB object and its default View object
- I also created a page where I display a table read-only based on the View object
- Finally, I added a text field and a button to the page
- What I want to achieve is to insert all tags entered in the entry in the table fields, when the button is clicked. Note, however, that the entry field is a comma-separated list of tags, moreover, I have to insert only those tags that are new (to respect the constraint of database), and finally, I would like to use the sequence in insert or orders. Once completed, the page should also be updated.
My first question is whether a stored procedure is the right way to perform such a step insert logical. If not, what other means must be used in the ADF.
My second question is to know how to call the stored procedure and pass it the value of the input as a parameter field. I found this article http://andrejusb.blogspot.cz/2011/04/invoking-stored-procedures-and.html, but miss me a few transition points:
- How the callGreetingsFunction method call (I just get it that it's a method of the EO generated Java class?) after that the button is clicked?
- How to pass the value of the input field in this method as a parameter?
Thanks in advance for your help.
Now, what happens if I run it like this:
A. the procedure is executed after a click on the button
(B) the page is not updated (I had to do the research to get the new lines are visible in the table)
C. the constraint is ignored (after discounting there were several lines with unique identification number, but pr is - empty)
D. nothing has been committed to the database - if I closed the application window and it start again, the lines have disappeared from the table, but addition of new lines used number of increased seq
E. Similarly, if I did directly inserts into the database, these lines did not appear until I transferred the application
B. told it page to refresh. And that's usually enough to refresh your ViewObject with: viewObject.executeQuery)
C. Si the constraint is not enforced for null values. And this has nothing to do with the adf, this is related to oracle db.
D. you're calling commit.
E. you must re-run your view object (viewObject.executeQuery ())
Nevertheless, here is my rookie questions:
There there a simple way to refresh the page (or just the table containing the data)?
-How to validate changes (immediately after execution of the procedure)?
-How is the constraint has been ignored? I am sure it would fail on validation, but I thought that it will be considered even for adding data to the table.
-Are there a way to update the original Version of the database every time that the page is opened or refreshed?
-Drag and drop operation Execute like button on your page (or call vo.executeQuery () by program)
-Drag and drop the operation of posting as a button on your page (or invoke it by programming on the DBTransaction object)
-ignored for what values? for null values? It is expected, because each null is "unique."
-Yes, but you probably shouldn't do that for performance reasons, see this: Andrejus Baranovskis Blog: Cache results for ADF iterator property
Read also this: Andrejus Baranovskis Blog: job ADF and PL/SQL Invocation changes side effect
Dario
Maybe you are looking for
-
Daily discharge of the battery is normal?
I have a new HP DV7T-6100 CTO Quad Edition Entertainment Notebook PC (purchase of Jun). I just noticed that after normal shut down there is a 1% / day in battery leakage. It is if I stop with the battery at 100% capacity, then use the laptop in 10 da
-
Error message when opening Windows XP
I bought a computer with Windows XP. At the opening, it is an error message: Windows cannot find ' C:Docume~1\KIRIBI~1\LOCALS~1\Temp\{22667~1.EXE. How can I get rid of this problem?
-
Want to dv6 - 7250ca Windows 7 Validy sensor not working not
Hello I have a HP envy dv6 - 7250ca I formatted and installed Windows 7 Professional. I found a driver using DriverMax to my fingerprint reader, but windows displays the device as "unavailible" and requests, I have reinstall the driver. I tried, but
-
How can I recover the Vista operating system?
I have a tablet that is using Windows Vista. Hard to drive tablets erased clean with Vista. How can I recover the Vista operating system? I hope that I don't need to go out and buy a new OS, because the Tablet is worth only a few dollars and can be l
-
The action center that says software potentially harmful detected
Original title: error message of the action center I get a message in the center of the action that said potentially malicious programs detected - when I click on see details or fix, nothing happens