Works of anonymous block - failure of the procedure
Hi guys,.I am new to PL/SQL, and right now, I have problems with a new procedure.
If I execute the instructions of an anonymous block, then everything works fine.
As a stored procedure, it fails: PLS-00306: wrong number or types of arguments.
I don't understand - could you please help me?
Oracle Database 10 g Express Edition Release 10.2.0.1.0 - product
PL/SQL Release 10.2.0.1.0 - Production
"CORE 10.2.0.1.0 Production."
AMT for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
The procedure inserts data in multiple tables - so the original procedure has 800 lines.
I tested it with a shorter version, but it still does not work as a procedure.
Here is the execute statement:
begin
P_P5020_test (
i_GespAnrede_tx => 'Herr',
i_GespName_tx => 'GespName',
i_GespVorname_tx => 'GespVorname',
i_GespTitel_tx => 'GespTitel',
i_GespStelle_tx => 'GespStelle',
i_GespFunktion_isn => 1,
i_GespBereich_isn => 1,
i_GespTelNr_nr => '1111',
i_GespTelNrArt_isn => 1,
-- Daten vom Ansprechpartner:
i_ApAnrede_tx => 'Frau',
i_ApName_tx => 'ApName',
i_ApVorname_tx => 'ApVorname',
i_ApTitel_tx => 'Aptitel',
i_ApStelle_tx => 'ApStelle',
i_ApFunktion_isn => 2,
i_ApBereich_isn => 2,
i_ApTelNr_nr => '2222',
i_ApTelNrArt_isn => 1,
-- Allgemeine Parameter:
i_UN_nr => 110532,
i_TelNr_isn => 54,
i_hiber_isn => 4,
i_AnlVon_tx => 'SMY',
i_TaskArt_isn => 12,
i_Bemerkung_tx => 'Bemerkung'
);
END;
and here is the procedure:create or replace
PROCEDURE p_P5020_test
--
-- Parameter:
--
(
-- Daten vom Gesprächspartner:
i_GespAnrede_tx varchar2,
i_GespName_tx varchar2,
i_GespVorname_tx varchar2,
i_GespTitel_tx varchar2,
i_GespStelle_tx varchar2,
i_GespFunktion_isn number,
i_GespBereich_isn number,
i_GespTelNr_nr varchar2,
i_GespTelNrArt_isn number,
-- Daten vom Ansprechpartner:
i_ApAnrede_tx varchar2,
i_ApName_tx varchar2,
i_ApVorname_tx varchar2,
i_ApTitel_tx varchar2,
i_ApStelle_tx varchar2,
i_ApFunktion_isn number,
i_ApBereich_isn number,
i_ApTelNr_nr varchar2,
i_ApTelNrArt_isn number,
-- Allgemeine Parameter:
i_UN_nr number,
i_TelNr_isn number,
i_hiber_isn number,
i_anlVon_tx varchar2,
i_TaskArt_isn number,
i_sonstGrund_tx varchar2,
i_Bemerkung_tx varchar2,
-- für die Task:
i_BeginnDatum_dt date,
i_BeginnZeit_ts timestamp,
i_FaelligVonDatum_dt date,
i_FaelligVonZeit_ts timestamp,
i_FaelligBisDatum_dt date,
i_FaelligBisZeit_ts timestamp,
i_TaskPrio_isn number
)
--
--------------------------------------------------------------------------------
--
IS
--
-- Variablen:
--
v_MA_nr number := 4;
v_GespBez_nr number; -- return BezNr vom Gesprächspartner
v_ApBez_nr number; -- return BezNr vom Ansprechpartner
v_Task_nr number; -- return TaskNr für die Kon
v_TaskThema_tx varchar2(40); -- anhand taskart ermitteln
-- für die Beziehung:
v_BezGueltigVon_dt date := sysdate;
v_BezGueltigBis_dt date := to_date('31.12.2099', 'DD.MM.YYYY');
-- für die Notiz / Kon:
v_KonThema_tx varchar2(40);
v_KonArt_isn number;
v_KonWeg_isn number := 2; -- 2 = Telefon
v_KonDatum_dt date := sysdate;
v_KonUhrzeit_ts timestamp := systimestamp;
--
--
--------------------------------------------------------------------------------
--
BEGIN
-- select into für variablen durchführen
--
--
-- v_taskThema_tx füllen
IF i_taskArt_isn != 999999
THEN
SELECT
TASK_ART_NAME
INTO v_taskThema_tx
FROM T_TASK_ART
WHERE task_art_isn = i_taskArt_isn;
--
--
-- v_KonArt_ISN füllen
IF i_TaskArt_isn = 10 -- Nennung verweigert
THEN v_KonArt_ISN := 13;
END IF;
IF i_TaskArt_isn = 11 -- krank
THEN v_KonArt_ISN := 7;
END IF;
IF i_TaskArt_isn = 12 -- Urlaub
THEN v_KonArt_ISN := 8;
END IF;
IF i_TaskArt_isn = 13 -- nicht am Platz
THEN v_KonArt_ISN := 9;
END IF;
IF i_TaskArt_isn = 14 -- Feierabend
THEN v_KonArt_ISN := 10;
END IF;
IF i_TaskArt_isn = 15 -- Besprechung
THEN v_KonArt_ISN := 11;
END IF;
IF i_TaskArt_isn = 16 -- zu Tisch
THEN v_KonArt_ISN := 12;
END IF;
IF i_TaskArt_isn = 17 -- sonstiger Grund
THEN v_KonArt_ISN := 14;
END IF;
--
--
-- v_konThema_tx füllen
SELECT
kon_art_name
INTO v_konThema_tx
FROM T_KON_ART
WHERE kon_art_isn = v_konArt_isn;
--
--
END IF; -- i_taskArt_isn != 999999
--
--
--------------------------------------------------------------------------------
--
--
--
IF i_ApName_tx IS NOT NULL -- AP gefüllt?
-- dann Gesp anlegen
THEN
INSERT INTO t_bez
(
bez_un_nr,
bez_anrede,
bez_titel,
bez_name,
bez_vorname,
bez_stelle,
bez_funktion_isn,
bez_bereich_isn,
bez_bemerkung,
bez_gueltig_von,
bez_gueltig_bis,
bez_anlvon
)
VALUES
(
i_un_nr, -- bez_un_nr
i_GespAnrede_tx, -- bez_anrede
i_GespTitel_tx, -- bez_titel
i_GespName_tx, -- bez_name
i_GespVorname_tx, -- bez_vorname
i_GespStelle_tx, -- bez_stelle
i_GespFunktion_isn, -- bez_funktion_isn
i_GespBereich_isn, -- bez_bereich_isn
'Als Gesprächspartner angelegt, '|| -- bez_bemerkung
to_char(sysdate, 'DD.MM.YYYY - hh24:mi')||
' '||
i_AnlVon_tx||
' ',
v_BezGueltigVon_dt, -- bez_gueltig_von
v_BezGueltigBis_dt, -- bez_gueltig_bis
i_AnlVon_tx -- bez_anlvon
)
RETURN t_bez.bez_nr INTO v_GespBez_nr;
-- telefonnummer anlegen
INSERT INTO t_telnr
(
telnr_von,
telnr_vonnr,
telnr_nr,
telnr_art_isn,
telnr_anlvon
)
VALUES
(
'BEZ', -- telnr_von
v_GespBez_nr, -- telnr_vonnr
i_GespTelNr_nr, -- telnr_nr
i_GespTelNrArt_isn, -- telnr_art_isn
i_AnlVon_tx -- telnr_anlvon
)
;
--
--
-- jetzt AP anlegen
INSERT INTO T_BEZ
(
bez_un_nr,
bez_anrede,
bez_titel,
bez_name,
bez_vorname,
bez_stelle,
bez_funktion_isn,
bez_bereich_isn,
bez_bemerkung,
bez_gueltig_von,
bez_gueltig_bis,
bez_anlvon
)
VALUES
(
i_un_nr, -- bez_un_nr
i_ApAnrede_tx, -- bez_anrede
i_ApTitel_tx, -- bez_titel
i_ApName_tx, -- bez_name
i_ApVorname_tx, -- bez_vorname
i_ApStelle_tx, -- bez_stelle
i_ApFunktion_isn, -- bez_funktion_isn
i_ApBereich_isn, -- bez_bereich_isn
'Als Ansprechpartner angelegt, '|| -- bez_bemerkung
to_char(sysdate, 'DD.MM.YYYY - hh24:mi')||
' '||
i_AnlVon_tx||
' ',
v_BezGueltigVon_dt, -- bez_gueltig_von
v_BezGueltigBis_dt, -- bez_gueltig_bis
i_AnlVon_tx -- bez_anlvon
)
RETURN t_bez.bez_nr INTO v_ApBez_nr;
-- jetzt TelNr anlegen
INSERT INTO t_telnr
(
telnr_von,
telnr_vonnr,
telnr_nr,
telnr_art_isn,
telnr_anlvon
)
VALUES
(
'BEZ', -- telnr_von
v_ApBez_nr, -- telnr_vonnr
i_ApTelNr_nr, -- telnr_nr
i_ApTelNrArt_isn, -- telnr_art_isn
i_AnlVon_tx -- telnr_anlvon
)
;
END IF; -- i_ApName_tx IS NOT NULL
--
---------------------------------------
--
--
-- AP nicht gefüllt:
--
IF i_ApName_tx IS NULL
THEN
-- Gesprächspartner als Ansprechpartner anlegen
INSERT INTO t_bez
(
bez_un_nr,
bez_anrede,
bez_titel,
bez_name,
bez_vorname,
bez_stelle,
bez_funktion_isn,
bez_bereich_isn,
bez_bemerkung,
bez_gueltig_von,
bez_gueltig_bis,
bez_anlvon
)
VALUES
(
i_un_nr, -- bez_un_nr
i_GespAnrede_tx, -- bez_anrede
i_GespTitel_tx, -- bez_titel
i_GespName_tx, -- bez_name
i_GespVorname_tx, -- bez_vorname
i_GespStelle_tx, -- bez_stelle
i_GespFunktion_isn, -- bez_funktion_isn
i_GespBereich_isn, -- bez_bereich_isn
'Als Ansprechpartner angelegt, '|| -- bez_bemerkung
to_char(sysdate, 'DD.MM.YYYY - hh24:mi')||
' '||
i_AnlVon_tx||
' ',
v_BezGueltigVon_dt, -- bez_gueltig_von
v_BezGueltigBis_dt, -- bez_gueltig_bis
i_AnlVon_tx -- bez_anlvon
)
RETURN t_bez.bez_nr INTO v_ApBez_nr; -- Achtung: wird als AP angelegt!
-- telefonnummer anlegen
INSERT INTO t_telnr
(
telnr_von,
telnr_vonnr,
telnr_nr,
telnr_art_isn,
telnr_anlvon
)
VALUES
(
'BEZ', -- telnr_von
v_ApBez_nr, -- telnr_vonnr ACHTUNG: vom AP!
i_GespTelNr_nr, -- telnr_nr
i_GespTelNrArt_isn, -- telnr_art_isn
i_AnlVon_tx -- telnr_anlvon
)
;
END IF; -- i_ApName_tx IS NULL
--------------------------------------------------------------------------------
--
END;
Here are the variables of the anonymous block work - the instructions are the same:declare
i_GespAnrede_tx varchar2(4) := 'Herr';
i_GespName_tx varchar2(60) := 'GespName';
i_GespVorname_tx varchar2(30) := 'GespVorname';
i_GespTitel_tx varchar2(10) := 'GespTitel';
i_GespStelle_tx varchar2(60) := 'GespStelle';
i_GespFunktion_isn number := 1;
i_GespBereich_isn number := 1;
i_GespTelNr_nr varchar2(20) := '111111';
i_GespTelNrArt_isn number := 1;
-- Daten vom Ansprechpartner:
i_ApAnrede_tx varchar2(4) := 'Frau';
i_ApName_tx varchar2(60) := 'ApName';
i_ApVorname_tx varchar2(30) := 'ApVorname';
i_ApTitel_tx varchar2(10) := 'ApTitel';
i_ApStelle_tx varchar2(60) := 'ApStelle';
i_ApFunktion_isn number := 2;
i_ApBereich_isn number := 2;
i_ApTelNr_nr varchar2(20) := '222222';
i_ApTelNrArt_isn number := 1;
-- Allgemeine Parameter:
i_UN_nr number := 110532;
i_TelNr_isn number := 54;
i_hiber_isn number := 4;
i_AnlVon_tx varchar2(5) := 'SMY';
i_TaskArt_isn number := 12;
i_sonstGrund_tx varchar2(15);
i_Bemerkung_tx varchar2(50);
--
v_MA_nr number := 4;
v_GespBez_nr number; -- return BezNr vom Gesprächspartner
v_ApBez_nr number; -- return BezNr vom Ansprechpartner
v_Task_nr number; -- return TaskNr für die Kon
v_TaskThema_tx varchar2(40); -- anhand taskart ermitteln
-- für die Beziehung:
v_BezGueltigVon_dt date := sysdate;
v_BezGueltigBis_dt date := to_date('31.12.2099', 'DD.MM.YYYY');
-- für die Notiz / Kon:
v_KonThema_tx varchar2(40);
v_KonArt_isn number;
v_KonWeg_isn number := 2; -- 2 = Telefon
v_KonDatum_dt date := sysdate;
v_KonUhrzeit_ts timestamp := systimestamp;
Why is - it works for anonymous block - bute the procedure fails with PLS-00306: wrong number or types of arguments?Thank you
Sven
Edited by: 923182 the 25.03.2012 06:38
Welcome to the forum!
Thank you for providing your information to Oracle version. You must provide this whenever you post a new question.
All parameters for procedures and functions must be listed in the method call unless the parameter has a DEFAULT value.
You said a procedure with 32 settings but have listed only 24 in the method call.
It's ok if the 8 other parameters have default values, but they do not. You can use NULL by DEFAULT, if a parameter does not need to have a value or cannot be used.
Your anonymous block does not call the procedure, there is no 'settings', that's why you don't see the problem there.
See specification of default values for the parameters of subprogramme in the PL/SQL language reference
http://docs.Oracle.com/CD/B28359_01/AppDev.111/b28370/subprograms.htm#i23202
>
By initializing formal IN the settings to the default values, you can pass a different number of actual parameters to a subprogram, accepting the default values to the actual parameters is omitted. You can also add new formal parameters without having to change all calls to the subprogramme.
If a real parameter is omitted, the default value of the corresponding formal parameter is used.
You can't ignore a formal parameter by omitting its actual parameter. To omit the first parameter and specify the second, use named notation (see passing parameters real subprogramme positional, Named or mixed Notation).
You cannot assign NULL to an uninitialized formal parameter by omitting its actual parameter. You must assign NULL as default or explicitly pass null.
>
You can also use nototation "Named" when you specify parameters by name
See passing parameters real subprogramme positional, Named or mixed Notation in the same doc.
raise_salary(amount => bonus, emp_id => emp_num);
Tags: Database
Similar Questions
-
Error in procedure Stoerd, but working in anonymous block.
declare
CUR cursor is
Select 'Edit'. Object_type | » '|| Object_name | ' Compile ' Invalid_Obj, Object_Type, Object_Name
From Dba_Objects has
Where A.Owner = 'Dataload' and A.Status = 'Invalid';
Begin
For I In news
Loop
Begin
Immediately run I.Invalid_Obj;
Exception
While others then
NULL; - Dbms_Output.Put_Line (Sqlerrm |': ' |) I.Object_Type |' '|| I.Object_Name);
End;
End loop;
Exception
While others then
NULL; - Dbms_Output.put_line (SQLERRM);
End;
Above anonymous block execute successfully.
but when I create as stored procedure then, it gives the error as
There is no such thing as Dba_Objects.
Please, suggest what I do for the stored procedure?
Published by: Nilesh hole on June 2, 2010 12:00 AMIf you don't have any rights sys you that should
(a) request the administrator to run utlrp (preferably, as this always runs compilation in the right order)
(b) do not use dba_objects but user_objects, assuming that you are connected as a LOADINGIn a normal situation, this should not be necessary, so you should always question why you even want to do (and are reinventing the wheel). The dbms_utility package also has a COMPILE_SCHEMA procedure.
-----------
Sybrand Bakker
Senior Oracle DBA -
Change of anonymous block to a stored procedure
Hi, how can I modify this code to become a procedure stored instead of anonymous block. I need to pass the parameters on a regular basis. which means that I have to perform the procedure on a daily basis with specific parameters. I am running Oracle 11 g and coding with plsql. Thanks in advance for your help.
DECLARE
/*Your query as cursor */
CURSOR emp_cur IS
SELECT ename, sal FROM emp;
/*UTL_SMTP related varriavles. */
v_connection_handle UTL_SMTP.CONNECTION;
v_from_email_address VARCHAR2(30) := '[email protected]';
v_to_email_address VARCHAR2(30) := 'yyyy@[qr.com';
v_smtp_host VARCHAR2(30) := 'x.xxx.xxx.xxx'; --My mail server, replace it with yours.
v_subject VARCHAR2(30) := 'Your Test Mail';
l_message VARCHAR2(200) := 'This is test mail using UTL_SMTP';
/* This send_header procedure is written in the documentation */
PROCEDURE send_header(pi_name IN VARCHAR2, pi_header IN VARCHAR2) AS
BEGIN
UTL_SMTP.WRITE_DATA(v_connection_handle,
pi_name || ': ' || pi_header || UTL_TCP.CRLF);
END;
BEGIN
/*UTL_SMTP related coding. */
v_connection_handle := UTL_SMTP.OPEN_CONNECTION(host => v_smtp_host);
UTL_SMTP.HELO(v_connection_handle, v_smtp_host);
UTL_SMTP.MAIL(v_connection_handle, v_from_email_address);
UTL_SMTP.RCPT(v_connection_handle, v_to_email_address);
UTL_SMTP.OPEN_DATA(v_connection_handle);
send_header('From', '"Sender" <' || v_from_email_address || '>');
send_header('To', '"Recipient" <' || v_to_email_address || '>');
send_header('Subject', v_subject);
--MIME header.
UTL_SMTP.WRITE_DATA(v_connection_handle,
'MIME-Version: 1.0' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle,
'Content-Type: multipart/mixed; ' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle,
' boundary= "' || 'SAUBHIK.SECBOUND' || '"' ||
UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);
-- Mail Body
UTL_SMTP.WRITE_DATA(v_connection_handle,
'--' || 'SAUBHIK.SECBOUND' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle,
'Content-Type: text/plain;' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle,
' charset=US-ASCII' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle, l_message || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);
FOR i IN emp_cur LOOP
UTL_SMTP.WRITE_DATA(v_connection_handle,
i.ename || '--' || i.sal || UTL_TCP.CRLF);
END LOOP;
UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);
-- Close Email
UTL_SMTP.WRITE_DATA(v_connection_handle,
'--' || 'SAUBHIK.SECBOUND' || '--' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(v_connection_handle,
UTL_TCP.CRLF || '.' || UTL_TCP.CRLF);
UTL_SMTP.CLOSE_DATA(v_connection_handle);
UTL_SMTP.QUIT(v_connection_handle);
EXCEPTION
WHEN OTHERS THEN
UTL_SMTP.QUIT(v_connection_handle);
RAISE;
END;CREATE OR REPLACE PROCEDURE BDA. PR_SEND_EMAIL
(p_from_email_address VARCHAR2
p_to_email_address VARCHAR2
p_smtp_host VARCHAR2
p_subject in VARCHAR2 DEFAULT "Test E-mail"
p_message VARCHAR2 DEFAULT ' is the TEST mail with the help of UTL_SMTP "
)
IS
/ Request as cursor * /.
CURSOR emp_cur IS
SELECT ename, sal FROM emp;
/ * Related UTL_SMTP varriavles. */
v_connection_handle UTL_SMTP. CONNECTION;
/ * This procedure of send_header is mentioned in the documentation * /.
PROCEDURE send_header (pi_name IN VARCHAR2, pi_header IN VARCHAR2) AS
BEGIN
UTL_SMTP. WRITE_DATA (v_connection_handle, pi_name |) ': ' || pi_header | UTL_TCP. CRLF);
END;
BEGIN
/ * Associated with coding UTL_SMTP. */
v_connection_handle: = UTL_SMTP. OPEN_CONNECTION (host-online p_smtp_host);
UTL_SMTP. HELO (v_connection_handle, p_smtp_host);
UTL_SMTP. MAIL (v_connection_handle, p_from_email_address);
UTL_SMTP. RCPT (v_connection_handle, p_to_email_address);
UTL_SMTP. OPEN_DATA (v_connection_handle);
send_header ('from', "" sender" <' ||="" p_from_email_address="" ||="" '="">" ");
send_header ('To', ' "receiver" <' ||="" p_to_email_address="" ||="" '="">"");
send_header ('Subject', p_subject);
-MIME header.
UTL_SMTP. WRITE_DATA (v_connection_handle, "MIME-Version: 1.0 ' |") UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, ' Content-Type: multipart/mixed;) ' || UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, ' boundary = "' | '") CARINE. SECBOUND' | '"' || UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, UTL_TCP. CRLF);
-Body of the message
UTL_SMTP. WRITE_DATA (v_connection_handle, '-' |) "JOHAN. SECBOUND' | UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, ' Content-Type: text/plain;) "|| UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, 'charset = US-ASCII' |) UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, p_message |) UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, UTL_TCP. CRLF);
I'm IN emp_cur
LOOP
UTL_SMTP. WRITE_DATA (v_connection_handle, i.ename |) '--' || i.SAL | UTL_TCP. CRLF);
END LOOP;
UTL_SMTP. WRITE_DATA (v_connection_handle, UTL_TCP. CRLF);
-E-mail nearby
UTL_SMTP. WRITE_DATA (v_connection_handle, '-' |) "JOHAN. SECBOUND' | '--' || UTL_TCP. CRLF);
UTL_SMTP. WRITE_DATA (v_connection_handle, UTL_TCP. CRLF. '.' || UTL_TCP. CRLF);
UTL_SMTP. CLOSE_DATA (v_connection_handle);
UTL_SMTP. Quit (v_connection_handle);
EXCEPTION
WHILE OTHERS THEN
UTL_SMTP. Quit (v_connection_handle);
LIFT;
END;
/
CREATE OR REPLACE SYNONYM PUBLIC PR_SEND_EMAIL OF BDA. PR_SEND_EMAIL;
BEGIN
BDA. PR_SEND_EMAIL (p_from_email_address => ' [email protected]')
, p_to_email_address => ' [email protected]'
, p_smtp_host-online 'x.xxx.xxx.xxx '.
p_subject-online "TEST Your Mail"
p_message-online "Is the TEST mail with the help of UTL_SMTP"
);
EXCEPTION, THEN THAN OTHERS
THEN DBMS_OUTPUT. Put_line ('ERROR in the procedure PR_SEND_EMAIL-' |) SQLERRM);
LIFT;
END;
/
'>'> -
Hello
I have trouble getting my head around the status of the work in APEX_PLSQL_JOB.
I have a button on a page that presents a work using:
This creates a job runs my packaged procedure and returns the JOB_ID argument which I store in a table, so I can query its status thereafter.l_sql := 'BEGIN validation_pkg.run_validations_job(NULL,:P7_APP_ID); END;'; l_job := APEX_PLSQL_JOB.SUBMIT_PROCESS(p_sql => l_sql,p_status => 'Validation Submitted');
The job runs then but I want to update the status of the job as it progresses through the stages of the treatment, it runs. So, I want to call APEX_PLSQL_JOB. UPDATE_JOB_STATUS. This call requires two parameters, the JOB_ID argument and the new STATUS. The manual contains the code example:
and says: APP_JOB is a "reserved" component that will automatically "replaced for you at runtime with the number of actual jobs.APEX_PLSQL_JOB.UPDATE_JOB_STATUS( P_JOB => :APP_JOB, P_STATUS => 'New Status');
However, when I want to talk: APP_JOB in my code 'create a package body... '. ', as
It returns a "bad bind variable. compilation error 'APP_JOB'apex_plsql_job.update_job_status (P_JOB =>:APP_JOB, P_STATUS => 'Stage 1 Complete');
How can I make to APP_JOB in my procedure packed?
Thank you very much
MartinHello
You must add the p_app_job parameter for example to your validation_pkg.run_validations_job procedure.
Then present you the work asl_sql := 'BEGIN validation_pkg.run_validations_job(NULL, :P7_APP_ID, :APP_JOB); END;'; l_job := APEX_PLSQL_JOB.SUBMIT_PROCESS(p_sql => l_sql, p_status => 'Validation Submitted');
In the procedure, then use you value of parameter in APEX_PLSQL_JOB. UPDATE_JOB_STATUS call
APEX_PLSQL_JOB.UPDATE_JOB_STATUS( P_JOB => p_app_job, P_STATUS => 'New Status');
Kind regards
Jari
-----
My Blog: http://dbswh.webhop.net/htmldb/f?p=BLOG:HOME:0
Twitter: http://www.twitter.com/jariolai -
anonymous block of pl/sql procedure ended with no result
started just learning oracle pl/sql and I am facing a problem here.
I have no problem to compile, but whenever I run the nth procedure would seem except the following message is displayed and not showing any output that should not be the case: block anonymous filled
I tried to set serveroutput size 50000; changes but nth.
Here is my pl/sql procedure not sure if I'm doing things.
CREATE OR REPLACE PROCEDURE CHECK AS
empnum NUMBER;
EmpName VARCHAR2 (50);
BEGIN
Select employee.e #.
, Employee.Name since it is
in empnum
empname
Join driver used on driver.e # employee.e = #.
Mechanic to join on mechanic.e # driver.e = #;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT. Put_line ('ok');
END CHECK;
/
I'm trying to achieve the same result in the following sql query:
select employee.name, employee.e#
from employee join driver
on driver.e# = employee.e#
join mechanic
on mechanic.e# = driver.e#
where rownum = 1;If there is no similar records if it will display the employee name and numbers. If there is no such document found it will show an ok message.
My bad, NO_DATA_FOUND is not triggered when a select statement is used like that. This is a way to approach it.
create or replace procedure check
as
number of empnum;
EmpName varchar2 (50);
is_exist boolean;
Start
I'm in)
Select employee.e #.
, Employee.Name since it is
Join driver used on driver.e # employee.e = #.
Mechanic to join on mechanic.e # driver.e = #.
)
loop
is_exist: = true;
dbms_output.put_line (' e #-' | lpad (IE #, 20, ' ') |) ' name ' - | i.Name);
end loop;If not is_exist then
raise the no_data_found;
end if;exception
When no_data_found then
dbms_output.put_line ('ok');
end check;
/This isn't a very elegant way of doing things. But I am limited to knowledge of the requirement of the company. Therefore, the best I could come up with. If you can explain how you're going to put this procedure into your business situation we could help you better.
-
Backblaze in particular, but it would be for any backup or future software I guess.
Tags are stored in the file in your catalog. If you want to have them available after a disk crash, you should make regular, automated backups of your catalog on a different physical disk files. You can enable this in Lightroom via settings-> General-> Backup catalog. Note: you should always take backups of your photos, this feature in Lightroom doesn't have backups of your photos.
If at some point you consider moving away from Lightroom, you can also write tags to the photos themselves (or in the case of RAW for the XMP sidecar files). This can be done by selecting all the photos and metadata-> saves the metadata of files (Note: this will take a lot of time if you have selected a large number of photos). You can also turn on the option to automatically catalog settings-->--> write metadata changes automatically to XMP. Any tags written via this method is readable by any other photo app that I know.
-
What is anonymous block, what is the usefulness of this, when he'll create...
One of them please send me the link.Hello
An anonymous block with the keyword 'start' stats and ends with the "end" keyword
It store all of the commands you want this block to do.
Whenver required, you can then run this code to perform the same tasks over and over again.
But the preferred method is to use the functions and procedures stored in memory and runs faster.
For more details and information, please see:
http://www.orafaq.com/wiki/Anonymous_block
Procedures and functions:
http://www.techonthenet.com/Oracle/procedures.php
HTH
KK -
Hi friends
I am developing anonymous blocks that displays the message on the screen, like "hello world" "is SYSDATE today" and "tomorrow is SYSDATE + 1". To make me try to develop anonymous block, but it shows me error... so friends can you help me with this...
Set SERVEROUTPUT on
declare
p_text varchar2 DEFAULT "hello world";
P_date date default sysdate;
P_next_date date default sysdate + 1;
Start
DBMS_OUTPUT. PUT_LINE (|) P_text);
DBMS_OUTPUT. Put_line (' today's :'||) P_date);
DBMS_OUTPUT. Put_line ("tomorrow is :'|| p_next_date);
end;
/
Thanks in advance
RommyHi, Rommy,
Always format your code. Dash to show the main sections (DECLARED, BÉGIN, etc..)
Type these 6 characters
{code}
(small letters only, inside curly braces) before and after the formatted text, to keep the spacing when posting on this site.DECLARE p_text VARCHAR2 (50) DEFAULT 'hello world'; P_date DATE DEFAULT SYSDATE; P_next_date DATE DEFAULT SYSDATE + 1; BEGIN DBMS_OUTPUT.PUT_LINE (P_text); DBMS_OUTPUT.PUT_LINE ('today is: ' || TO_CHAR (P_date, 'Dy DD-Mon-YYYY')); DBMS_OUTPUT.PUT_LINE ('Tommorrow is: ' || TO_CHAR (p_next_date, 'Dy DD-Mon-YYYY')); END; /
When you declare a VARCHAR2 variable, you must specify the maximum length.
The | operator is used between two string expressions; Looks like you forgot the first operand in one place.
Using a DATE where we expect a VARCHAR2 (as an operand to |, for example) is not technically an error, but it's a bad habit. TO_CHAR to create a string in any format you want.
-
create or replace FUNCTION get_table_md (p_owner in varchar2, p_table IN VARCHAR2) RETURN CLOB IS
-Define local variables.
/ * declare
p_owner varchar2 (30): = "AVTYM";
p_table IN VARCHAR2 (30): = "TRANSACTION_HEADER";
*/
h NUMBER; -handle returned by OPEN
e NUMBER; -handle returned by ADD_TRANSFORM
p_tableref varchar2 (30);
doc CLOB.
Doc2 CLOB.
BEGIN-Specify the type of object.
h: = DBMS_METADATA. OPEN ('TABLE');-Use filters to specify the desired object.
DBMS_METADATA. SET_FILTER (h, 'SCHEMA', p_owner);
DBMS_METADATA. SET_FILTER (h, 'NAME', p_table);-Request that the metadata be transformed into creation DDL.
th: = DBMS_METADATA. ADD_TRANSFORM (h, 'DDL');-Retrieves the object.
doc: = DBMS_METADATA. FETCH_CLOB (h);
-Free resources.
DBMS_METADATA. Close (h);
p_tableref: = substr (p_table, 1, 25). ' $RDEF';
Doc2: is REGEXP_replace(doc,p_table,p_tableref,1,1,'im');.
doc: = REGEXP_replace(doc2,'"CREATE_DT"','"EXCHANGE_DT"',1,2,'im');
-dbMS_OUTPUT. Put_line (doc);
RETURN doc;END;
Hello
check the privilege you may have granted by a role that you need direct access to the object and not by the role. You can test if you are granted by a role, by running the SET command role no and see if you can still run the anonymous block.
Thank you
-
Hello
I'm not able to execute the procedure using dblink in PLSql block.
Although he works outside the end of the beginning.
Please suggest solution
Hello
Thanks everone for your contributions,
As well as the permissions, I used to run inside the PL sql block, which was not necessary, we can simply call the procedure using dblink.
Thanks guys,.
-
DECLARE
the stored procedure varchar2 (25);
BEGIN
-DBMS_OUTPUT. Put_line ("enter the name of the procedure :'||: procname");
the stored procedure: =: procname;
DBMS_OUTPUT. Put_line (' procedure :'|| stored procedure);
stored procedure.
END;
: procname is a variable binding in the apex to switch the running value.
This is the error I get
ORA-06550: line 7, column 2:
PLS-00221: "STORED procedure" is not a procedure or is not defined
ORA-06550: line 7, column 2:
PL/SQL: Statement ignored
5the stored procedure: =: procname;
6 DBMS_OUTPUT. Put_line (' procedure :'|| stored procedure);
7. the stored procedure.
8 END;
SmtWtL wrote:
DECLARE
the stored procedure varchar2 (25);
BEGIN
-DBMS_OUTPUT. Put_line ("enter the name of the procedure :'||: procname");
the stored procedure: =: procname;
DBMS_OUTPUT. Put_line (' procedure :'|| stored procedure);
stored procedure.
END;
: procname is a variable binding in the apex to switch the running value.
This is the error I get
ORA-06550: line 7, column 2:
PLS-00221: "STORED procedure" is not a procedure or is not defined
ORA-06550: line 7, column 2:
PL/SQL: Statement ignored
5. the stored procedure: =: procname;
6 DBMS_OUTPUT. Put_line (' procedure :'|| stored procedure);
7. the stored procedure.
8 END;
What you're trying to achieve?
Bind variables cannot be used for the dynamic execution of stored programs. Dynamic SQL using lexical rather than bind substitution must be used to run when the program name is not known until execution of the programs.
declare sproc varchar2(25); begin sproc := :procname; dbms_output.put_line('procedure:'||sproc); execute immediate 'begin ' || sproc || '; end;'; -- DO NOT DO THIS! end;
It is a fundamental design flaw and a security disaster. It's stops essential compilation controls is performed and is open to attack by SQL injection and other security vulnerabilities. There is no good reason to do this.
-
Scheduling of the anonymous blocks
Is it possible to predict an anonymous block? If so, how can I do it? a code example is appreciated.
Edited by: jdude on October 20, 2011 04:34
This is an example of stored procedure, I can't understand how to write one for an anonymous block
Start
dbms_scheduler.create_job
(job_name = > ' SCOTT.) RUN_SCOTTS_PROC',.
job_type = > 'procedure_stockee ',.
job_action = > ' SCOTT. SCOTTS_PROC',.
start_date = > trunc (sysdate + 1) + 1/24.
repeat_interval = > ' FREQ = DAILY; BYDAY IS MON, MAR, SEA, GAME, FRI, SAT.; BYHOUR = 1;',
enabled = > true,
auto_drop = > false,
Comments = > 'convert 152152 work');
end;
Edited by: jdude on October 20, 2011 04:42If you have single quotes in your anonymous block you have to do a single quote 2 x or use the q rating.
Otherwise, the first apostrophe in the plsql block ends the string of the parameter program_action isn't? -
The output is always 'anonymous block completed.
Hello
I wrote a simple stored procedure as shown:
create or replace procedure display
*(*
Ename on emp.ename%type
*)*
is
Start
Select ename ename from emp where empno = '7369';
end;
I tried to run the help above this block
declare
Ename emp.ename%type;
Start
Display (ename);
dbms_output.put_line (ename);
end;
I always get the output as "anonymous block filled" and nothing else.
Help, please. Thank you.I tried myself and her work.
In any case, environment in which you work: DB, OS version and software...Saad,
-
Passage of the Arguments to the anonymous block
I have a unix script that calls an anonymous block / sql file.
The sql file read a flat file via UTL_FILE utility and insert/update to update these data to the table.
When calling SQL script, I put
to get rid of the * '&' * char in the string (input file).'SET DEFINE OFF'
Now I have to deal with several files on the same trial, I invoke the SQL script from arguments like:
Invoke:
Inside to access the xx.sql arguments like:start xx.sql FILE_NAME
It only works if I putdeclare y varchar2(20); begin dbms_output.put_line('Y= '||y); y:='&1'; dbms_output.put_line('Y= '||y); end; /
In this case no * '&' * char being treated as read from the standard input.'SET DEFINE ON'
Create procedure/function is out of reach.
Someone can suggest... that should be the approach and is there a way to manage it?Hello
Linda wrote:
I have a unix script that calls an anonymous block / sql file.
The sql file read a flat file via UTL_FILE utility and insert/update to update these data to the table.
When calling SQL script, I put'SET DEFINE OFF'
to get rid of the * '&' * char in the string (input file).
Are your really get into single quotes? If this is not the case, why you put them in this message?
Now I have to deal with several files on the same trial, I invoke the SQL script from arguments like:
Invoke:
start xx.sql FILE_NAME
Who is using SQL * more variable substitution. You must SET SET to retrieve the value of a variable substitution.
You do not have to use & to mark the substitution variables; If you know iof some other special characters (such as ~) which is not used in your code, you can do the marker by saying:SET DEFINE ~
Moreover, if the variable represents a value of sclar (wuch as the string "Filename" in your example), you can use bind variables to pass data in your anonymous block.
For example, at the beginning of xx.sql, you can declare and set a varibale bind like this:VARIABLE arg_1 VARCHAR2 (20); SET DEFINE ON EXEC :arg_1 := '&1'; SET DEFINE OFF
DEFINE must be enabled only for the statement that sets: arg_1.
After that, your script can use: arg_1 instead of & 1:declare y varchar2(20); begin dbms_output.put_line('Y= '||y); y:=:arg_1; dbms_output.put_line('Y= '||y); end; /
Note that you do not quote the variable name to bind when it is used. You had to mention the name of substitution variable, because SQL * Plus solves the substitution variables before sending the code for the compiler, but SQL * more passes the variable binding for the compiler, and the compiler can see that: arg_1 is a VARCHAR2.
You can also define and set the binding variable in the calling script, but the passage of an argument tends to be a better way.
There are other alternatives (such as escape &s);) We can Explorer if the two methods I described above do not work for you.
-
Medal of honor allied assault has stopped working?
This message seems to me when I start the Medal of honor Allied:
(a problem caused blocking the program works correctly windows will close the program and notify you if a solution is available)
Hello
· How long have you been experiencing this problem?
You can reduce hardware acceleration and check if the problem persists:
1. right click on the desktop and choose personalize.
2. click on display settings.
3. in the display settings window, click on advanced settings.
4. display the Troubleshooting tab.
5. click on change settings.
6 reduce hardware acceleration.
Also try the procedure from the following link: http://windows.microsoft.com/en-US/windows7/Fixing-game-performance-problems
Also try to check if the game works the clean boot: http://support.microsoft.com/kb/929135
NOTE: make sure that you start the computer in normal mode after troubleshooting is done
You can also post your questions on: http://support.ea.com/
Maybe you are looking for
-
Satellite P200 Vista Ultimate - boot configuration data read error
I have a Toshiba Satellite P200 running Vista Ultimate. Recently I started having a problem after restarting after the installation of vista updates. In fact, it will not start at all and gives me the following message on a black screen. Windows coul
-
Automatic stop when you use the CD/DVD on the 1900-803 Satellite player
Ive had problems with my 1900-803 for the last 3 months. whenever I use the cd/dvd drive, my laptop turns off without warning after 15-20 minutes. It also stops if I try and play all the video files or scan my hard drive for viruses or spyware. is it
-
Cannon MG2100 won't recognize black 210XL cartridge
Original title: Canon MG2100 INSTALL NEW INK CARTRIDGE- BUT THIS PRINTER WILL NOT RECOGNIZE THE (210XL) BLACK INK CARTRIDGE... I BOUGHT TWO, OR WON'T WORK... PLEASE ADVISE... NOTE: IT IS THE FIRST REPLACEMENT OF THE CARTRIDGE
-
Vertical scroll bar on the right side is gone and I have no how to get it back.
I did something I shouldn't have and have now no vertical scroll bar on the right side. How can I get that back?