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 AM

    If 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 LOADING

    In 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;

    /

  • Update the State of the work using APEX_PLSQL_JOB. UPDATE_JOB_STATUS in the procedure

    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:
              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');
    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.

    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:
    APEX_PLSQL_JOB.UPDATE_JOB_STATUS( P_JOB => :APP_JOB, P_STATUS => 'New Status');
    and says: APP_JOB is a "reserved" component that will automatically "replaced for you at runtime with the number of actual jobs.

    However, when I want to talk: APP_JOB in my code 'create a package body... '. ', as
    apex_plsql_job.update_job_status (P_JOB =>:APP_JOB, P_STATUS => 'Stage 1 Complete'); 
    It returns a "bad bind variable. compilation error 'APP_JOB'

    How can I make to APP_JOB in my procedure packed?

    Thank you very much
    Martin

    Hello

    You must add the p_app_job parameter for example to your validation_pkg.run_validations_job procedure.
    Then present you the work as

    l_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.

  • How the tags are stored and then backed up?  Don't want to do all this work if a system failure and the need to start over with saved photos will be all the work of marking saved.  Or IIR/when Lightroom is so more suitable or an option as the next photo p

    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.

  • Anonymous block

    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

  • help for anonymous block

    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
    Rommy

    Hi, 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.

  • Dbms_metadata in a stored procedure. If the table is in the schema, run the stored procedure the procedure works very well.  If I try to get the table ddl to a different scheme it can't find table in a schema.  I run as an anonymous blocks and it works

    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

  • Hi, I am not able to execute the procedure using dblink in PLSql block. Although he works outside the end of the beginning. Please suggest solution

    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,.

  • Version of 5.0.2.00.07(online à APEX) - error in the execution of a stored procedure through anonymous block

    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.

    apex-bind_var.png

    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:42

    If 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
     'SET DEFINE OFF' 
    to get rid of the * '&' * char in the string (input file).
    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
    Inside to access the xx.sql arguments like:
    declare
    y varchar2(20);
    begin
    dbms_output.put_line('Y= '||y);
    y:='&1';
    dbms_output.put_line('Y= '||y);
    end;
    /
    It only works if I put
     'SET DEFINE ON' 
    In this case no * '&' * char being treated as read from the standard input.
    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.

  • Error when you try to start the Medal of Honor Allied Assault: a problem caused blocking the program works correctly. Windows will close the program and notify you if a solution is available.

    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