anonymous block procedure.
Hi experts,If I wrote the procedure and the means of functions and tables
I use able to recover. USER_TABLES, such user_functions, user_objects. Ok
Only once if I wrote an anonymous block of procedure. »
How I see it. is there a way to drop that...
is this possible?
Oracle db10g
Sorry for the delay of edition.
ADF 7 wrote:
If I wrote the procedure and the means of functions and tables
I use able to recover. USER_TABLES, such user_functions, user_objects. Ok
Only once if I wrote an anonymous block of procedure. »
How I see it. is there a way to drop that...
There are 2 types of units of PL/SQL code.
Named units of PL/SQL. Here are the packages, procedures and functions. They are named. They are stored within the database. They are compiled. The compiled version is also stored in the database.
Units of PL/SQL without name. They are anonymous PL/SQL blocks. These are created by the client. They have no name. They cannot be procedures, functions or packages. They may contain a function or procedure localized nested. They went through the Oracle client. Oracle creates a cursor by analyzing the block and then running the cursor. Client bind variables are supported in the anonymous PL/SQL block.
Unnamed (anonymous) PL/SQL is used by customers to call units named PL/SQL.
Named units generally contains business and the processing logic and validation - providing an interface for the client to the logical database in Oracle.
As nameless units exist only as sliders in the memory of the server (LMS), these impossible to remove, because there is no static database object to drop.
Tags: Database
Similar Questions
-
How to run four procedures, in order, by using anonymous block
Hello
I am trying to run four procedures, in order, by using anonymous block. If one of the procedure fails remaining should get executed. How can I achieve this?
For example:
BEGIN
PROC1;
Proc2; -Suppose that Proc2 will fail, it should not affect the execution of Proc3 and proc 4
Proc3;
Proc 4;
END;Thank you!
Hello
Maybe this can help you:
BEGIN begin Proc1; exception when others then dbms_output.put_line('proc1 ' || sqlcode || ' ' || sqlerrm); end; begin Proc2; exception when others then dbms_output.put_line('proc2 ' || sqlcode || ' ' || sqlerrm); end; begin Proc3; exception when others then dbms_output.put_line('proc3 ' || sqlcode || ' ' || sqlerrm); end; begin Proc4; exception when others then dbms_output.put_line('proc4 ' || sqlcode || ' ' || sqlerrm); end; END;
In your case, it may be useful if your procedures have their own exception handlers, so they never fail. But then you need a sort of exception information that is displayed.
concerning
Kay -
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;
/
'>'> -
The procedure for anonymous block PL SQL Exception Handling problem?
Hello
I am a newbie to PL/SQL.
I'm having trouble when trying to manage exceptions for block anonymous PLSQL procedure I created will format any block of 10 digits and format it in the next (XXX) - XXX - XXXX.
I need.
1. the handle if there is more than 10 digits
2. the handle if there are less than 10 numbers
3. the handle if there is no inappropriate character (no number)
4. the handle if there is no characters.
I created the following procedure. However, my if/else attempts logic or raise exceptions have create errors so far.
Please enter the following code.
create or replace
PROCEDURE format_phone
(
p_phne_no IN OUT VARCHAR2
) IS
extra_digits EXCEPTION; -Number must be a 10-digit number. Please enter the 10-digit
no_digits EXCEPTION; -Please enter numbers there is no registration numbers.
invalid_char EXCEPTION; -You entered a wrong character please enter numbers 0-9.
less_digits EXCEPTION; -You have entered too few figures. Please enter a 10-digit phone number.
BEGIN
p_phne_no: ='(')
|| SUBSTR (p_phne_no, 1, 3).
')'
||' -'||
SUBSTR (p_phne_no, 4, 3)
||' -'||
SUBSTR(p_phne_no,7);
-DBMS_OUTPUT. Put_line (p_phne_no);
EXCEPTION
WHEN invalid_char
THEN
dbms_output.put_line ('you have entered an inappropriate character please enter 0-9 numeric values.');
WHEN no_digits
THEN
dbms_output.put_line (' Please enter the numbers there is no registration numbers.) ") ;
WHEN less_digits
THEN
dbms_output.put_line (' you entered too few figures.) Please enter a 10-digit phone number. ") ;
WHEN extra_digits
THEN
dbms_output.put_line (' you entered too many numbers.) Must include a 10-digit number. Please enter the 10 digits. ") ;
END format_phone;
Thank you for your concern.
>>
OK so I need to declare a variable, then pass p_phne_no parameter to this variable.
You could, Yes, but you don't need to. You could simply test the value of the passed parameter
Length (p_phne_no) > 10...
> - I need 3 scenarios more in which I test Val., which is always equal to the parameter p_phne_no?
Yes (or just test p_phne_no).
-
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:
and here is the procedure: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;
Here are the variables of the anonymous block work - the instructions are the same: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;
Why is - it works for anonymous block - bute the procedure fails with PLS-00306: wrong number or types of arguments?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;
Thank you
Sven
Edited by: 923182 the 25.03.2012 06:38Welcome 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 nameSee passing parameters real subprogramme positional, Named or mixed Notation in the same doc.
raise_salary(amount => bonus, emp_id => emp_num);
-
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 -
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
-
need to run an anonymous block
Hi guys,.
I have a proc as below.
() proc_expl
EmpID in number,
Ename in varchar2,
marks_typ brands);
marks_type is the type of record which consists of 3 topics.
marks_typ (number number sub1, sub2, sub3 number)
and I declared with type of table of this record type.
now I want to run anonymous block and I give the values of the parameters like below:
declare
EmpID in number,
Ename in varchar2,
marks_typ brands
Start
EmpID: = 123.
Ename: = 'abc ',.
Mark marks_typ: = marks_typ (55,67,78);
() proc_expl
EmpID = > empid.
Ename = > ename,
brands = > marks_typ);
end;
can someone please suggest me why this is not running properly.
Thanks in advance!
Rgds,
LKR
Try the below
CREATE or REPLACE TYPE marks_type IS OBJECT (sub1 NUMBER (10),)
Sub2 NUMBER (10),
SUB3 NUMBER (10)
);
CREATE or REPLACE TYPE marks_typ IS TABLE OF THE marks_type;
CREATE OR REPLACE PROCEDURE proc_expl (empid NUMBER,
Ename VARCHAR2,
brand marks_typ
)
AS
v_marks marks_typ: = points;
BEGIN
BECAUSE me IN 1.v_marks. COUNTY
LOOP
DBMS_OUTPUT. Put_line (v_marks (i) .sub1 |) «, » || v_marks (i) .sub2 | «, » || v_marks (i). SUB3);
END LOOP;
END;
SET SERVEROUTPUT ON
DECLARE
EmpID NUMBER;
Ename VARCHAR2 (20);
Mark marks_typ: = marks_typ();
BEGIN
EmpID: = 123;
Ename: = 'abc ';
Marks.extend;
Marks (1): = marks_type (55,67,78);
proc_expl (EmpID, Ename, mark);
END;
Execution: -.
SQL > DECLARE
2 empid NUMBER;
3 ename VARCHAR2 (20);
4 points marks_typ: = marks_typ();
5 BEGIN
6 empid: = 123;
ename 7: = 'abc ';
8 marks.extend;
9 marks (1): = marks_type (55,67,78);
10 proc_expl (empid, ename, marks);
11 END;
12.
55,67,78
PL/SQL procedure successfully completed.
It may be useful
-
Anonymous blocks that goes down and creates a table
Version: 11.2.0.3
I'm relatively new to PL/SQL.
We have a table named CHK_CNFG_DTL.
I want to create a backup table for CHK_CNFG_DTL who will be named as CHK_CNFG_DTL_BKP_ < timestamp > for example: CHK_CNFG_DTL_BKP_JULY_22_2013
Creating this backup table must be automated, so I want to create an anonymous block that will first remove the existing backup table and then create a new backup of the original table.
The code below works fine. But the first time when you run it, the loop will not iterate because there is no such table named % CHK_CNFG_DTL_BKP.
declare
v_stmt varchar2 (1000);
date of T_DATE;
Start
for rec in
(select * from user_tables where table_name like '% CHK_CNFG_DTL_BKP')
loop
Start
run immediately "alter session set nls_date_format =" DD_MON_YYYY "';"
v_stmt: = 'drop table' | Rec.table_name | "purge."
dbms_output.put_line (v_stmt); -Old backup drops table
immediately run v_stmt;
Select sysdate in double T_DATE;
v_stmt: = "create table CHK_CNFG_DTL_BKP_ | TO_DATE (V_DATE): ' in select * from CHK_CNFG_DTL';
dbms_output.put_line ('Bkp création table CHK_CNFG_DTL_BKP_' | to_date (v_date));
dbms_output.put_line (v_stmt);
immediately run v_stmt; -Creates the new table of backup
exception
while others
then
dbms_output. Put_line (rec.table_name |'-'|) SQLERRM);
end;
end loop;
end;
/
PL/SQL procedure successfully completed.
-Backup table was not created.
SQL > select table_name from user_Tables where table_name like '% CHK_CNFG_DTL ';
TABLE-NAME
------------------------------
CHK_CNFG_DTL
Of course, this can fixed by creating a table as bleow before running the anonymous block
SQL > create table CHK_CNFG_DTL_BKP_JULY_22_2013 (x varchar2 (37));
Table created.
and now the block will be executed with success as
24 end;
25.
drop table CHK_CNFG_DTL_BKP_JULY_22_2013 purge
Creating table Bkp CHK_CNFG_DTL_BKP_22_JUL_2013
create the table CHK_CNFG_DTL_BKP_22_JUL_2013 select * from CHK_CNFG_DTL
PL/SQL procedure successfully completed.
But it goes to production. We cannot have a table like CHK_CNFG_DTL_BKP_JULY_22_2013 without an appropriate reason.
How can I change the code above so that if even if there is no such like '% CHK_CNFG_DTL_BKP' table, he will create the backup table?
Hello
Why don't you press the create backup of the loop?
declare
v_stmt varchar2 (1000);
date of T_DATE;
Start
for rec in
(select * from user_tables where table_name like 'CHK_CNFG_DTL_BKP %')
loop
Start
run immediately "alter session set nls_date_format =" DD_MON_YYYY "';"
v_stmt: = 'drop table' | Rec.table_name | "purge."
dbms_output.put_line (v_stmt); -Old backup drops table
immediately run v_stmt;
exception
while others
then
dbms_output. Put_line (rec.table_name |'-'|) SQLERRM);
end;
end loop;
Select sysdate in double T_DATE;
v_stmt: = "create table CHK_CNFG_DTL_BKP_ | TO_DATE (V_DATE): ' in select * from CHK_CNFG_DTL';
dbms_output.put_line ('Bkp création table CHK_CNFG_DTL_BKP_' | to_date (v_date));
dbms_output.put_line (v_stmt);
immediately run v_stmt; -Creates the new table of backup
end;
-
How can I request/access to the source code of an anonymous block? For example, if I want the source of a particular procedure, it is accessible from the table 'all_source. Even if she throws the source for an anonymous block after it is done with her, always store it somewhere while it's executing analysis, it should at least be accessible as part of the package as follows:
declare src_code varchar2; begin select source into src_code from wherever the DB stores it; dbms_output.put_line(src_code); end;
How can I request/access to the source code of an anonymous block
If you give the anonymous block a unique label, you might be able to query v$ sql:
SQL> col guid new_val guid SQL> SQL> select sys_guid() guid from dual 2 / GUID -------------------------------- C418F340066DF07FE04017AC25922063 SQL> SQL> declare 2 sql_text long; 3 label long := '&&guid'; 4 begin 5 select sql_fulltext 6 into sql_text 7 from v$sql 8 where sql_fulltext like '%' || label || '%'; 9 10 dbms_output.put_line ('SQL of anonymous block:'); 11 dbms_output.put_line (sql_text); 12 end; 13 / old 3: label long := '&&guid'; new 3: label long := 'C418F340066DF07FE04017AC25922063'; SQL of anonymous block: declare sql_text long; label long := 'C418F340066DF07FE04017AC25922063'; begin select sql_fulltext into sql_text from v$sql where sql_fulltext like '%' || label || '%'; dbms_output.put_line ('SQL of anonymous block:'); dbms_output.put_line (sql_text); end; PL/SQL procedure successfully completed. SQL>
-
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 -
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,
-
Anonymous block with Variable and SELECT
Hi guys,.
I'm fighting to connect the material that I am learning. I read on the anonymous blocks and variable so I want to write a
Nice and neat select with all the fancy stuff (variables, exceptions) to get it right and what I read in the book.
DECLARE
MYSTRING AS VARCHAR (10);
MYSTIRNG: = 'X '.
BEGIN
SELECT * FROM DUAL WHERE DUMMY = MYSTRING
END;
but... This causes an error after another. I get the wrong concept here or is this a syntax error?PL/SQL, you will need to use SELECT... IN...
http://download.Oracle.com/docs/CD/B19306_01/AppDev.102/b14261/sqloperations.htm#sthref1348SQL> declare 2 mystring varchar(10) := 'X'; 3 myvar varchar(10); 4 begin 5 select dummy into myvar 6 from dual 7 where dummy = mystring; 8 dbms_output.put_line(myvar); 9 end; 10 / X PL/SQL procedure successfully completed.
-
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.
Maybe you are looking for
-
How to find and remove special characters in the file name?
I have a files in various Windows Server 2003 with a special character in its name, which cause problem with backup software, I Don t know which character is because in the browser that they do not appear and command line, they are listed only as a m
-
Need product key for downloaded Windows XP Pro x 64 trial
I downloaded the trial version of Windows XP Pro x 64 recently, but I can't install it without a product key. Where can I buy a product key?
-
Why do I get green unwanted in all my photos and my videos?
Original title: color Why do I get green unwanted in all my photos and my videos?
-
ROXIO KEEP OPENING IN SAFE MODE
My roxio DVD vhs keep opening in my safe mode, how can I fix
-
What is the best choice, factory recovery Vista, or upgrade to windows 7?
Hi everyone, my hp Pavilion a610t/Vista premium, 2.2 G cpu, 3 G ram is begginning to get slow and my registry has been damaged (my cd player does not work because the driver does not not despite all troubleshooting, will not read SD card, task manage