Handling exceptions in the stored procedure, loop IF... ON THE OTHER
Hello guys,.We want to put in the exception handling in the loop, but get the following error:
Error (43.3): PLS-00103: encountered the symbol "EXCEPTION" when expecting one of the following values: begin case declare end exit for goto rise back loop mod null pragma select update while < ID > < one between double quote delimited identifiers of > < a variable binding > < < close current delete fetch locking open insert commit rollback savepoint SQLExecute fusion forall hose set
create or replace
Xxxx PROCEDURE
FOR IN MESSSY
(
Select i.
FROM x I have
)
LOOP
Upper IF (CODE) = 'n' THEN
INSERT INTO T_MESS (MP)
(
Select I.MP_ID
OF T_ME
);
Upper ELSIF (MESSSY.k2) = 'L' THEN
DELETE T_MESS WHERE T_MESS. MP = MESSSY. MP;
END IF;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
A program attempted to insert duplicate values in a column that is constrained by a unique index.
DBMS_OUTPUT. Put_line ("a program attempted to insert duplicate values in a column that is constrained by a unique index.")
-No Rollback
END;
COMMIT;
END LOOP;
END xxxx;
is - anyone know why?
There are few changes needed in your code to compile successfully.
Take a look at the following code. I pointed out the changes made by me with stars to compile successfully.
I hope this helps.
CREATE OR REPLACE PROCEDURE xxxx
*as*
*begin*
FOR messsy IN (SELECT i.* FROM dual i) LOOP
*begin*
IF upper(CODE)='N' THEN
INSERT INTO T_MESS(MP)
(
select I.MP_ID
FROM T_ME
);
ELSIF upper(MESSSY.k2)='L' THEN
DELETE T_MESS WHERE T_MESS.MP = MESSSY.MP;
END IF;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
A program attempted to insert duplicate values in a column that is constrained by a unique index.
DBMS_OUTPUT.PUT_LINE ('A program attempted to insert duplicate values in a column that is constrained by a unique index.')
--No Rollback
END;
COMMIT;
END LOOP;
END xxxx;
Tags: Database
Similar Questions
-
How do you manage exceptions / errors in stored procedures?
How do you manage exceptions / errors in stored procedures?Exceptions/errors can be handled in different ways in the stored procedures.
(1) could be using an EXCEPTION block in the procedure in which to use WHENTHEN.
(2) may declare a variable in the DECLARE section as EXCEPTION type,
raise it to the extent necessary using STIMULUS and manipulate in EXCEPTIONAL setting using the WHEN clause.
(3) could use keywords SQLCODE & SQLERRM to display no errors and the error code... -
Handling exceptions in the workflow
Hi all...
What type of exceptions we should treat in the workflow. I run normal exceptions pl/sql. Also what are the different ways to handle exceptions?
Thank you
Jim.You can manage something like
EXCEPTION
WHILE OTHERS THEN
WF_CORE. CONTEXT ('PackageName',
'Functionname ',.
ITEMTYPE,
ITEMKEY,
ACTID,
FUNCMODE,
(RESULT);Thank you
-
How to handle Exceptions during the HTTP J2ME...?
Can someone help me find answers to the following questions?
1. how to catch exceptions for HTTP requests as unavailable network connection / page not found / error occur?
2. What are the J2ME functions necessary to open an HTTP request, a response, identify the code response, parsing of the json message?
3. What are the functions of J2ME to create a timer, start timer and stop a timer?
4. What are the functions of J2ME to spawn a thread, kill a thread, create a mutex, lock a mutex, unlock a mutex?
5. how detect us a WAP-Push message?Thanks in advance
Concerning
Hinduja
1 page not found and other http response code is not considered and exception. but network unavailable. to catch the exception you just add 'try catch block' and intercept the right Exception or an IOException. for the page not found and other codes http error, once connected, you can call the getResponseCode() of the httpConnection object. then in the HttpConnection API, there's static variables, which corresponds to the HTTP error codes.
2. check the HttpConnection in blackberry dev guide and it is the standard way of doing things. not sure about JSon message.
3 use the RIM API Timer and TimerTask object.
4. Ditto that create a thread in J2SE.
5. never worked with WAP push before. I'm sorry.
-
The use of equals in a loop a stored procedure
Hello
It's my stored procedure that works fine (average showing all the data in the Table)
Here, I would like to add this feature that I want to check if there is "Independent" in country_code, I want to raise an Exception manually.
I am struck here: after the cursor retrieves all the country_code in its loop, how do I check if country_code contains "IND" or not in there?
create or replace PROCEDURE Auto_After_Bod_Status
is
country_code VARCHAR2 (40);
EXCEPTION myException.
CURSOR PD1
IS
SELECT THE COUNTRY_CODE IN LINK_STATUS;
BEGIN
PD1 OPEN;
LOOP
FETCH PD1 IN country_code;
DBMS_OUTPUT. Put_line (country_code);
WHEN THE EXIT PD1% NOTFOUND;
END LOOP;
CLOSE PD1;
END Auto_After_Bod_Status;
Help, please. Thank you.user10503747 wrote:
I am struck here: after the cursor retrieves all the country_code in its loop, how do I check if country_code contains "IND" or not in there?
Why do you need to check it after the loop. Check as soon as the line is read. In addition, your DBMS_OUTPUT. Put_line (country_code); should be after OUTPUT WHEN PD1% NOTFOUND; not before:
create or replace PROCEDURE Auto_After_Bod_Status is country_code VARCHAR2(40); myException EXCEPTION ; CURSOR PD1 IS SELECT COUNTRY_CODE FROM LINK_STATUS; BEGIN OPEN PD1; LOOP FETCH PD1 INTO country_code; EXIT WHEN PD1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(country_code); IF country_code LIKE '%IND%' THEN close pd1; raise myException; END IF; END LOOP; CLOSE PD1; END Auto_After_Bod_Status;
But if you want to extract all the first lines:
create or replace PROCEDURE Auto_After_Bod_Status is country_code VARCHAR2(40); ind number := 0; myException EXCEPTION ; CURSOR PD1 IS SELECT COUNTRY_CODE FROM LINK_STATUS; BEGIN OPEN PD1; LOOP FETCH PD1 INTO country_code; EXIT WHEN PD1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(country_code); IF country_code LIKE '%IND%' THEN ind := 1; END IF; END LOOP; CLOSE PD1; IF ind = 1 THEN raise myException; END IF; END Auto_After_Bod_Status;
SY.
-
In a table - looping through the rows and the stored procedure call
APEX version: 3.2.0.00.27
Hello
I searched the forum and tried a few things but could not make it work.
I have a tabular presentation, developed with the help of the ATD ( )
What I'm trying to do now:
-After submit and validations, loop through all the lines and
-call a stored procedure passing 3 parameters obtained from each of the lines on the form of tables. This procedure will be an update of a database table.
On the forum, I found that I could do the loop "* FOR i IN 1..." APEX_APPLICATION.g_f03. "LOOP COUNT *" syntax.
Only for testing purposes, I tried just to view information with the following (On Load - after a footer) process (example of Denes Kubicek == > http://deneskubicek.blogspot.com/2009/05/execute-javascript-throuhg-plsql.html):
The foregoing would give me a ' * ORA-01403: no data found * ' message. I tried through various variants of APEX_APPLICATION.g_f0* #*, but still can't get anything to display correctly. In commenting on all the lines referring to APEX_APPLICATION.g_f0x above, the date would be are they displayed fine.declare v_today varchar2 (200); begin -- :P40_test := APEX_APPLICATION.g_f03(1); -- :P40_test2 := APEX_APPLICATION.g_f04.COUNT; :P40_test2 := 100; v_today := to_char (sysdate, 'dd.mm.yyyy'); --FOR i IN 1.. APEX_APPLICATION.g_f03.COUNT LOOP :P40_test := APEX_APPLICATION.g_f02(2); HTP.p ('<script type="text/javascript">'); HTP.p ( 'alert(''Today is ' || v_today -- || APEX_APPLICATION.g_f04(APEX_APPLICATION.g_f03(i)) || '.\n' || 'end!'');' ); HTP.p ('</script>'); -- :P40_test := APEX_APPLICATION.g_f02(APEX_APPLICATION.g_f02(i)); --END LOOP; end;
I tried uncomment the FOR... LOOP and play with the code (defining the process runs "On submit - after calculations" and Validations), I got was a ' * ORA-06502: PL/SQL: digital error or value: character conversion number error * "message.
Here is the script of the form in a table:
Regarding the parameters for the stored procedure, it would the MSLINK, VALVE_NUMBER and the VALVES_STYLE. FEATURE.select "V"."MSLINK", -- hidden (number) "V"."INSTALLATION_DATE", -- editable date picker "V"."MANUFACTURER_INDICATOR", -- editable (cascading LOV -- text) "V"."MODEL_INDICATOR", -- editable (cascading LOV -- text) "V"."DIAMETER_INDICATOR", -- editable (LOV -- number) "V"."PURPOSE_INDICATOR", -- editable (LOV -- text) "V"."VALVE_NUMBER", -- shown but not editable -- number "V"."MODIFY_DATE", -- shown but not editable "V"."MODIFY_USER", -- shown but not editable "V"."VALVES_STYLE"."FEATURE" -- shown but not editable -- number from "#OWNER#"."VALVES" "V" Where "V"."PROJECT_ID" = :P1_PROJECT_NUMBER AND "V"."VALVES_DFLAG" = 0
Help, please!
(Sorry for the long post).
Thank you
TanHi, Tan,
I have not seen that type of object - I've only used custom types for purposes of test years ago and have never used their within Apex!
One possibility is that the value of checksum being is based on all of the content of these fields, rather than only the part of the FEATURE. If there are other parts of the object, you could include those items as well.
Otherwise, as you f01 KP for a record, you will need to retrieve the values of the FUNCTION in your PL/SQL code directly from the table (because the user cannot modify these fields, you can be sure that the values in the table will be still valid).
Andy
-
The execution of a stored procedure from inside the cursor for loop?
I posted this in the SQL Developer forum, but I tried in SQLPlus and get the same error, so I think it's an encoding issue.
I have a piece of code that I'm trying to write that will only be executed once. The goal: we have three tables relating to the pieces of information. Each table has a column that stores the number of site that belongs to the part. We want to copy the parts of a site to about 130 sites which don't have any info on parts. The number of site is stored in another table. So I created three stored procedures, one for each of the three tables that we, who take 2 inputs: a source and destination site. Procedure names are: ptfile_copy_fac, ptxref_copy_fac and ptvndrs_copy_fac.
The problem I have is that I can run the procedures in a separate worksheet in SQL Developer, but when they are integrated in this cursor for loop, I get the following message from SQL Developer:
ORA-06550: line 23, column 11:
PLS-00103: encountered the symbol "PTFILE_COPY_FAC" during the expected in the following way:
:= . (@ %; immediate)
The symbol ': = ' was replaced by 'PTFILE_COPY_FAC' continue.
He repeated this for each of the three methods. I have attached the code I am trying to run below. He expects an assignment operator, but I have no idea why.
If there is a better way to do this, by all means let me know. I'm a SQL Server guy, I'm not sure how to do what I do using PL\SQL.
/ * Declares the variables source_fac and dest_fac.
The source_fac is the installation that we copy parts.
The dest_fac is the installation we copy parts to.* /
DECLARE
source_fac facility.facility_num%type;
INSTALLATION OF DEST_FAC. TYPE % FACILITY_NUM;
/ * Declare cursor to use loop for.
Slider load number installation and the status of the installation.
Is not installation of 1 or 2, since these will be
the main source of facilities.*.
CURSOR fac_cursor
IS
SELECT
facility_num,
div_state
Of
installation
WHERE
facility_num NOT IN (1,2);
BEGIN
FOR fac_row IN fac_cursor
LOOP
/ * Test for the State of the installation. If a Canadian State, the source_fac value 2.
Otherwise, the value source_fac 1.* installation.
IF fac_row.div_state IN ("AB", "BC", "Mo", "NB", "NL", "NT", "NS", "NAKED", "WE", "PE",
"QC", "SK", "YT")
THEN
source_fac: = 2;
ON THE OTHER
source_fac: = 1;
END IF;
/ * Sets the installation of destination to the facility_num from the cursor * /.
DEST_FAC: = FAC_ROW. FACILITY_NUM;
/ * Execute the three procedures, past of the source and dest AEC variable * /.
run ptfile_copy_fac (source_fac, dest_fac);
run ptxref_copy_fac (source_fac, dest_fac);
run ptvndrs_copy_fac (source_fac, dest_fac);
END LOOP;
END;
Published by: SunDevilKid on March 3, 2010 15:31
Update the comments you make more sense of the code.EXECUTE is a SQLPlus command, change your code to
dest_fac := fac_row.facility_num; ptfile_copy_fac(source_fac, dest_fac); ptxref_copy_fac(source_fac, dest_fac); ptvndrs_copy_fac(source_fac, dest_fac); END LOOP;
Max
http://oracleitalia.WordPress.com -
Question about handling apostrophe in the stored procedure parameter
I was wondering how people have dealt with this problem. In my process I use the operation to execute stored procedure (sp) to write data to a database, and it is by the way the field values to the sp as parameters. Works fine when everything is normal but as soon as an apostrophe is added in one of the fields, ka-boom. It breaks . So I have been messing around with the means to fight against this problem and did not really come wih an appropriate option. I know that I can go on the form and write a few RegEx and change the single apostrophe double that would work, but I have to write in several events since the form is sent to someone else and I can't have them seeing "clerk"s"instead of"clerk". Right now I'm writing an xpath statement that would replace the single apostrophe with a double bed with no luck. I was wondering if anyone else has had this problem and found an easy solution. Thank you
Mike
Why not use the parameterized query option.
In this way, your settings are replaced by some? and you don't get messed up with the '
Your select statement would look like: select * from table where column1 =? and column2 =?
Then you can map the? s in the process variables.
Jasmine
-
Access to the defined user compex types in stored procedure
Hi all
I have two complex types defined by the user which are defined as follows:
create or replace
TYPE 'MA_ROOT_OBJECT' AS THE OBJECT
(
USER_MACHINE VARCHAR2 (30),
USER_DOMAIN VARCHAR2 (60),
DATE OF EVENT_ACTIVITY_DT,
USERCOLL MA_USER_TABLE,
DATABASECOLL MA_DATABASE_TABLE
)
And USERCOLL and DATABASECOLL are again a different complex types defined by user 2. What should I do for the DATABASECOLL of the stored procedure?
I am getting error below when I try to access:
- Error (13.31): PLS-00302: component 'TMP_DATABASECOLL' must be declared
######################################################
PROCEDURE SP_MSACCESS_METADATA)
MSACCESSCOLL IN MA_ROOT_TABLE,
STATUS OF THE VARCHAR2)
AS
TMP_DB_NAME VARCHAR2 (100);
TMP_DATABASECOLL MA_DATABASE_TABLE;
meter NUMBER (3);
BEGIN
SAVEPOINT INIT;
TMP_DB_NAME: = MSACCESSCOLL. TMP_DATABASECOLL. DB_NAME
EXCEPTION
WHILE OTHERS THEN
STATUS: = "ERROR BY STORING DEMAND MSACCESS."
RAISE_APPLICATION_ERROR (-20001, SQLERRM);
ROLLBACK TO SAVEPOINT INIT;
END SP_MSACCESS_METADATA;
Since MA_DATABASE_TABLE is a collection, you must tell Oracle item on which you want to:
For example, if you want only one element in the collection:
TMP_DB_NAME: = MSACCESSCOLL. DATABASECOLL (1). DB_NAME;
otherwise, you will need to loop.
-
Pass an array of bytes to the oracle stored procedure
I have a problem with moving from byte array in Oracle stored procedure as an input parameter by using odp.net.
Here is the signature of the stored procedure:
SOMEPROCEDURE(session IN NUMBER, data IN RAW)
Here is c# code, which calls the procedure:
var cmd = new OracleCommand("SOME_PROCEDURE", _connection);
cmd.CommandType = CommandType.StoredProcedure;
var bt = new byte[]{1,68,0,83,128,1};
OracleParameter sessionId = new OracleParameter("dbSessionId", OracleDbType.Decimal, new OracleDecimal(_dbSessionId), ParameterDirection.Input);
OracleParameter data = new OracleParameter("statusData", OracleDbType.Raw, new OracleBinary(bt), ParameterDirection.Input);
cmd.Parameters.Add(sessionId);
cmd.Parameters.Add(data);
cmd.ExecuteNonQuery();
This code does not (stored procedure throws exception, which cannot receive), because in byte array hadou number 128!, if I display 128 on another number, minus 128, it works great!
What should I do?
After some tests I found the solution. Initially, you cannot switch to the array of bytes via the odp.net stored procedure, if the table contains 127 large values.
Yes, solution: 1. create the wrapper procedure
procedure SOME_PROCEDURE_WRAPPER (p_session_id in number, p_data in varchar2)
is v_data raw(1024);
rawdata raw(1024);
rawlen number;
hex varchar2(32760);
i number;
begin
rawlen := length(p_data);
i := 1;
while i <= rawlen-1
loop
hex := substrb(p_data,i,2);
rawdata := rawdata || HEXTORAW(hex);
i := i + 2; end loop;
SOME_PROCEDURE(p_session_id , rawdata);
end;
2 then need to modify the code c# in this way:
var cmd = new OracleCommand("SOME_PROCEDURE_WRAPPER", _connection);
cmd.CommandType = CommandType.StoredProcedure;
string @string = statusData.ToHexString();
OracleParameter sessionId = new OracleParameter("dbSessionId", OracleDbType.Decimal, new OracleDecimal(_dbSessionId), ParameterDirection.Input);
OracleParameter data = new OracleParameter("statusData", OracleDbType.Varchar2,@string.Length, new OracleString(@string), ParameterDirection.Input);
cmd.Parameters.Add(sessionId);
cmd.Parameters.Add(data);
cmd.ExecuteNonQuery();
where
public static string ToHexString(this byte[] bytes)
{
if(bytes == null || bytes.Length == null)
return string.Empty;
StringBuilder hexStringBuilder = new StringBuilder();
foreach (byte @byte in bytes)
{
hexStringBuilder.Append(@byte.ToString("X2"));
}
return hexStringBuilder.ToString();
}
-
Materialized view, based on the stored procedure
Hi all
is it possible to create a materialized view on the results returned by a stored procedure?
If this is not the case, do you think that any other way except for filling a table with data from the stored procedure and then founded the MV on it?
Thanks in advance.
MichaelTsilikidis wrote:
Sorry I don't speak properly. In fact the procedure does not return a value, it fills one of its parameters (of the ref cursor type) of data. That's what I wanted.
No it's not.
REF CURSOR don't store data, so it's not possible.
A Ref cursor is just a pointer to a query... and you can't "select from" a ref cursor, you can retrieve only one open.
PL/SQL 101: Understand the Ref Cursor
As correctly stated above, you can't question from a procedure to a function, and a materialized view is based on a query, you cannot use a procedure in a materialized view.
You could use a function pipeline instead of a procedure, or have the pipeline function obtain the results of the procedure and pipelines, and then the materialized view could be based on the results of this function in the pipeline.
example of function pipeline:
SQL > CREATE or REPLACE TYPE AS OBJECT num_descript (num number, descript varchar2 (30))
2.Type of creation.
SQL >
SQL > CREATE or REPLACE TYPE tbl_num_descript AS TABLE OF THE num_descript
2.Type of creation.
SQL >
SQL >
SQL > CREATE or REPLACE PACKAGE AS-reftest
2 FUNCTION pipedata (number p_choice) tbl_num_descript RETURN PIPELINED;
3 END;
4.Package created.
SQL >
SQL > CREATE or REPLACE PACKAGE BODY AS-reftest
2 FUNCTION pipedata (number p_choice) tbl_num_descript RETURN PIPELINED IS
3 v_obj num_descript: = num_descript (NULL, NULL);
4 v_rc sys_refcursor;
5 BEGIN
6. IF p_choice = 1 THEN
7 v_rc OPEN to SELECT empno as num, ename like descript FROM emp;
8 ELSIF p_choice = 2 THEN
9 OPEN v_rc to SELECT deptno as num, dname as descript OF THE Department;
10 END IF;
11 LOOP
12 FETCH v_rc INTO v_obj.num, v_obj.descript;
EXIT 13 WHEN v_rc % NOTFOUND;
14 PIPE ROW (v_obj);
15 END LOOP;
16 v_rc NARROW;
RETURN 17;
18 END;
END 19;
20.Package body created.
SQL > select * from table (reftest.pipedata (1));
DESCRIPT NUM
---------- ------------------------------
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.
SQL > select * from table (reftest.pipedata (2));
DESCRIPT NUM
---------- ------------------------------
10 ACCOUNTING
SEARCH 20
30 SALES
40 OPERATIONS -
How to do a select on the results of a stored procedure?
Hello
I am new to Oracle. I work with SQL Developer.
I'm doing a simple select on the results of a stored procedure call. I don't know how to do it. Here's what I have so far:
declare
type ref_cursor is ref cursor;
results ref_cursor;
Start
MyStoredProcedure (123 results);
Select * from results;
end;
/but he said to me:
Error from the 1 in the command line:
declare
type ref_cursor is ref cursor;
results ref_cursor;
Start
GET_TAX_TYPE_BY_TAX_ENTITY_KEY (60670100000000, results);
Select * from results;
end;
Error report:
ORA-06550: line 6, column 15:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 6, column 1:
PL/SQL: SQL statement ignored
06550 00000 - "line %s, column % s:\n%s".
* Cause: Usually a PL/SQL compilation error.
* Action:Obviously, select * results; is not the right way to do it. But what is?
Thanks for any advice forthcoming.
If a SQL cursor is built by a reporting system, a Java application, a c# program, or a PL/SQL call - the database doesn't care, because he doesn't know the difference. A Select SQL cursor created in PL/SQL through the ref cursor interface, won't be faster than the same SQL select in Eclipse. If the SQL source code is the same, the same cursor SQL program will be used by both.
What give you BIRT is the flexibility of the use of code Server (PL/SQL) to create the slider - this code doing business and technical decisions on how to design side than SQL, Select. Which is a good thing because it summarized the data model and the complexity BIRT server technique.
So my choice would be to use the procedural interface and return to the reporting system for the rendering of the ref Cursor.
The question of a slider running via the slider (selection of a cursor), is questionable. Yes, there are a set of specifications that allows to do this kind of thing. But it must be very firmly justified and careful design because it really is an exception. I personally (blame my DBA) would need a justification because it is much more of an exception. I have never seen it put in place in production in more than a decade of DBA'ing, despite the developers try to use such a hack - as it has always been much more powerful and the deployment of alternatives.
The concept for robust and efficient code for Oracle is: Maximise SQL. Minimize the PL/SQL (or Java / c# / etc.).
That means when it comes to database power, write an SQL program to do. Stop thinking of SQL as a language of data recovery a single simplistic statement. Think of it as a programming language. Extremely complex problems can be resolved with a single SQL, which requires easy code 100 + lines of PL/SQL, Java, or c#. Write SQL programs. Not SQL one-liners for a grinding program PL/SQL or Java data.
Why then PL/SQL? It is the best language to manage the creation of SQL, dealing with the process flow, conditional processing, and so on of exception handling. It is less than SQL (such as Java and c#) in the treatment of the data.
-
Error on the definition of the stored procedure in the simultaneous program
Hello
I created a stored procedure and wanted it attached to the concurrent program. The purpose of this stored procedure when you run it in simultaneous program, the system retrieves the data from the csv file downloaded from the server, then it will insert in the tables of SO / the Interface API. Below, the error occurred.
* Starts * 18 April 2012 18:18:42
Error ORACLE 6550 in FDPSTP
Cause: FDPSTP failed due to the ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in the call to 'SPKO1 '.
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Steps I did to set the stored proc
< < simultaneous executable program > >
Executable: RDRAGON_SO_IMPORT
Short name: RDRAGON_SO_IMPORT
Application: Order management
Method of execution: PL/SQL, stored procedure
Run file name: SPKO1
< < concurrent program - set > >
Program: RDRAGON SO IMPORT
Short name: RDRAGON_SO_IMPORT
Application: Order management
Name of executable: RDRAGON_SO_IMPORT
Method: PL/SQL, stored procedure
Format: text
No set
-Here are my stored procedure-
CREATE OR REPLACE PROCEDURE APPS. SPKO1 IS
FH UTL_FILE. TYPE_DE_FICHIER;
v_line VARCHAR2 (32767).
v_source_id NUMBER (10);
v_created_by NUMBER (10);
v_creation_date DATE;
v_org_id NUMBER (10);
v_orig_sys_docref VARCHAR2 (50);
V_Customer VARCHAR2 (360);
v_customer_prev VARCHAR2 (360);
v_sold_to_org NUMBER (10);
v_orig_line_ref NUMBER (10);
v_item_code VARCHAR2 (2000);
v_ordered_qty NUMBER (10);
v_selling_price NUMBER (10);
v_count NUMBER (10);
v_stat NUMBER;
/******************************************************************************
NAME: SPKO
PURPOSE:
REVISIONS:
Worm Date Description of the author
--------- ---------- --------------- ------------------------------------
1.0 16/04/2012 administrator 1. Created this procedure.
NOTES:
Keywords to replace automatically available Auto:
Object name: SPKO
SYSDATE: 16/04/2012
Date and time: 16/04/2012, 17:55:42 and 16/04/2012 17:55:42
Username: admin (set in Options of TOAD, editor of the procedure)
Name of the table: (defined in the dialog box "New PL/SQL object")
******************************************************************************/
BEGIN
v_source_id: = 6;
v_created_by: = - 1;
v_org_id: = 204;
v_customer_prev: = null;
v_orig_line_ref: = 0;
v_stat: = 0;
SELECT header_id in (DE) v_orig_sys_docref
Select header_id
of OE_ORDER_HEADERS_ALL
creation_date desc order
) WHERE ROWNUM = 1;
FH: = UTL_FILE. FOPEN ('XXANDDIR2', 'myfile1.csv', 'R', 32767);
< < file_read_lines > >
LOOP
BEGIN
UTL_FILE. GET_LINE (fh, v_line);
V_Customer: = LTRIM (RTRIM (REGEXP_SUBSTR (v_line, "[^,] +' 1, 1") ',' "') ','" ');
v_creation_date: = LTRIM (RTRIM (REGEXP_SUBSTR (v_line, "[^,] +' 1, 2") ',' "') ','" ');
v_item_code: = LTRIM (RTRIM (REGEXP_SUBSTR (v_line, "[^,] +' 1, 3") ',' "') ','" ');
v_ordered_qty: = LTRIM (RTRIM (REGEXP_SUBSTR (v_line, "[^,] +' 1, 4") ',' "') ','" ');
v_selling_price: = LTRIM (RTRIM (REGEXP_SUBSTR (v_line, "[^,] +' 1, 5") ',' "') ','" ');
v_orig_line_ref: = (v_orig_line_ref + 1);
If v_stat = 0 then
v_orig_sys_docref: = (v_orig_sys_docref + 1);
end if;
SELECT hca.cust_account_id from v_sold_to_org
OF hz_cust_accounts AOB.
HP hz_parties
WHERE hca.party_id = hp.party_id
AND hca.request_id is null
AND hp.party_name = v_customer;
If v_stat = 0 then
INSERT INTO OE_HEADERS_IFACE_ALL)
order_source_id,
orig_sys_document_ref,
org_id,
CREATION_DATE,
created_by,
last_update_date,
last_updated_by,
operation_code,
sold_to_org_id,
booked_flag)
VALUES)
v_source_id,
('TEST' | v_orig_sys_docref).
v_org_id,
v_creation_date,
v_created_by,
v_creation_date,
v_created_by,
"INSERT."
v_sold_to_org,
'Y') ;
commit;
end if;
INSERT INTO OE_LINES_IFACE_ALL)
order_source_id,
orig_sys_document_ref,
orig_sys_line_ref,
inventory_item,
org_id,
ordered_quantity,
unit_selling_price,
unit_list_price,
CREATION_DATE,
created_by,
last_update_date,
last_updated_by,
operation_code)
VALUES)
v_source_id,
('TEST' | v_orig_sys_docref).
v_orig_line_ref,
v_item_code,
v_org_id,
v_ordered_qty,
v_selling_price,
v_selling_price,
v_creation_date,
v_created_by,
v_creation_date,
v_created_by,
"INSERT");
commit;
v_customer_prev: = v_customer;
If v_customer_prev = v_customer then
v_stat: = 1;
on the other
v_stat: = 0;
end if;
-DBMS_OUTPUT. Put_line ('Col1: ' | v_source_id |', Col2: ' | v_creation_date |', Col3: ' | v_created_by |', Col4: ' | v_updated_date |', Col5: ' | v_updated_by);
EXCEPTION
WHEN NO_DATA_FOUND THEN
OUTPUT file_read_lines;
END;
END LOOP;
SELECT count (*) in the OE_HEADERS_IFACE_ALL v_count;
DBMS_OUTPUT. Put_line (' record Total inserted successfully: ' | v_count);
UTL_FILE. FCLOSE (FH);
END SPKO1;
/
But when I run the stored procedure using TOAD his work.
Help, please. This is my first time to attach the stored procedure in the concurrent program.
Thank you very much.
Kind regards
Diane
Published by: peopsquik08 on April 18, 2012 03:58as clive_t solier
>
You must explicitly reference the settings out
>Try
DECLARE VFILE VARCHAR2(32767); V_SOURCE_ID NUMBER; -- ERRBUF VARCHAR2(200); RETCODE NUMBER; BEGIN VFILE := 'myfile1.csv'; V_SOURCE_ID := 6; --APPS.OMORDERLOADER.SPKO1 ( VFILE, V_SOURCE_ID ); --COMMIT; APPS.OMORDERLOADER.SPKO1( ERRBUF => ERRBUF, RETCODE => RETCODE, VFILE => VFILE, V_SOURCE_ID => V_SOURCE_ID ); END;
but the code above to test your proc
to run concurrent SQL, you can use fnd_submit.submit_program
-
infinite loop in stored procedure
I am trying to create an infinite loop to test an error condition. I do this in the stored procedure. I have not created a stored procedure before. I get errors when I am writing the script. Can you please tell me what I'm doing wrong with this script?
CREATE OR REPLACE PROCEDURE blah.test_timeout
IS
number of deadline_days: = 1;
grace_period number: = 0;
BEGIN
-get day of the date limit
While deadline_days < 4000
LOOP
grace_period: = grace_period + 1;
dbms_output.put_line (' Hello mum ');
END LOOP;
RAISE_APPLICATION_ERROR (-20071, "what_error error:' | ') SQLERRM (sqlcode));
END;
/
Thank you!First tell me that this error message happens when you run this script.
You can use only * $, _, #* when you give the name of procedure, function, package, variable, trigger. Here, you use * (.) * in your name of the procedure so it will give you error.
and you first declare exception in your procedure declaration section. and raise it in Exception of procedure section.
In this you have to give the condition for which exception condition must raise.This is a sample I'll send to your reefrence:-_
CREATE OR REPLACE PROCEDURE raise_demo (inval NUMBER) IS
evenno EXCEPTION;
oddno EXCEPTION;
BEGIN
MOD IF (inval, 2) = 1 THEN
RAISE oddno;
ON THE OTHER
RAISE evenno;
END IF;
EXCEPTION
WHEN evenno CAN
dbms_output.put_line (to_char (Inval) |) "is even");
WHEN oddno THEN
dbms_output.put_line (to_char (Inval) |) "is weird");
END raise_demo; -
Trigger that executes the stored procedure does not
I have a trigger on a table which triggers the update of the column 'APPLICATION_OFFER_SENT '! The trigger looks like this:
Simply, he runs a procedure and takes the "PK_APPLICATION_NO" as a single parameter.CREATE OR REPLACE TRIGGER SCHEMA.COPY_APPLICATIONS AFTER UPDATE OF APPLICATION_OFFER_SENT ON PPLE_T_APPLICATION REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN UPDATE_OR_INSERT_APPL(:old.PK_APPLICATION_NO); END;
When I run the SP itdefl: exec UPDATE_OR_INSERT_APPL (1042); It works very well.
But when its done through the relaxation it doesn't?
The Proc looks like this:
Published by: oraCraft on Oct / 09/2010 09:11CREATE OR REPLACE PROCEDURE SCHEMA.UPDATE_OR_INSERT_APPL (IN_APPL_NO NUMBER) IS CURSOR c1 IS SELECT title, fullname, universityid, appl_no, appl_no_hash, OFFER_EXPIRATION_DATE, APPLICATION_CANCEL_DATE, room_hall FROM SCHEMA.ACCOM_APPLICATION_VIEW WHERE appl_no = IN_APPL_NO; rowcnt NUMBER; BEGIN FOR rec IN c1 LOOP SELECT COUNT(*) INTO rowcnt FROM SCHEMA2.ACCOMM_OFFER_ACCEPTANCE a WHERE a.appl_no = IN_APPL_NO; IF rowcnt = 0 THEN INSERT INTO SCHEMA2.ACCOMM_OFFER_ACCEPTANCE (title, fullname, universityid, appl_no, appl_no_hash, offer_expiration_date, application_cancel_date, room_hall) VALUES (rec.title, rec.fullname, rec.universityid, rec.appl_no, rec.appl_no_hash, rec.offer_expiration_date, rec.application_cancel_date, rec.room_hall); COMMIT; ELSIF rowcnt !=0 THEN UPDATE SCHEMA2.ACCOMM_OFFER_ACCEPTANCE t SET (t.offer_expiration_date, t.application_cancel_date, t.room_hall) = (select OFFER_EXPIRATION_DATE, APPLICATION_CANCEL_DATE, ROOM_HALL from SCHEMA.ACCOM_APPLICATION_VIEW B where B.appl_no = IN_APPL_NO); END IF; END LOOP; END;
Published by: oraCraft on Oct / 09/2010 09:11>
Validation is in my stored procedure, is not my trigger. I'm sure it's very good
>It is not very well according to the Application Developer Fundametals guide...
>
DDL statements are not allowed in the body of a trigger. Furthermore, no control of transaction
statements are allowed in a trigger. SAVEPOINT, COMMIT and ROLLBACK cannot be
used. For system triggers, TABLE {CREATE/ALTER/DROP} instructions and
EDIT... COMPILE are allowed.
Note: A procedure is called by a trigger cannot perform the previous transaction control statements,
because the procedure runs in the context of the body of the trigger.
>There is an exception to this rule if you use the pragma AUTONOMOUS TRANSACTION, but I do not see that in your trigger.
Kind regards
Bob
Maybe you are looking for
-
How do I regain yahoomail bookmark
Most visited and bookmarks is more I would get my yahoomail account. Says the Cycle prohibited.How can I find my account yahoo e-mail and more visited and bookmarks?
-
tvOS 9.2 and sharing family
After that the tvOS put 9.2 up-to-date content in my family sharing is no longer will play as a purchased item before. For example, the eve of the update I was able to go to the movies, content bought and then scroll down to a family member who alrea
-
How to add the Arabic language in Windows XP?
I have Windows XP Professional Version 2002, service Pack 3. I have this operating system in English only. Now, I would like to add Arabic language. How can I do?
-
I 2921 voice bundle router to support 50 IP Phone 7975 G and 1 SIP trunk telecommunications company the card must be added to support the SIP trunk and what are the licenses that will be required for the entire system as it works as a stand-alone sys
-
Can I configure a dvswitch with 1 physical NETWORK card
HelloA small question.I want to run a few tests associated with netflow, so I install a dvswitchI would like to add 2 hosts tteignant with a unique Teddy.y at - it no minimum number of natachasery pre - req?the dvswitch would work if a host has only