table insertion procedure

Hello

I have the table with the following structure:

CUS_ID NOT NULL NUMBER

CUS_FNAME VARCHAR2 (100)

CUS_LNAME VARCHAR2 (100)

CUS_ADDRESS VARCHAR2 (100)

CUS_TEL                                                        NUMBER

CUS_DATE                                                       DATE

CUS_TYPE VARCHAR2 (10)

I want to create procedure to insert values to the table.

I have the sequence for the column cus_id

My insertion procedure

Create procedure add_customers as

p_fname in customers.cus_fname%TYPE,

p_lname in customers.cus_lname%TYPE,

p_address in customers.cus_address%TYPE,

p_tel in customers.cus_tel%TYPE,

p_type to customers.cus_type%TYPE)

is

Start

Insert customers (cus_id, cus_fname, cus_lname, cus_address, cus_tel, cus_date, cus_type)

values (add_customer_id.nextval, p_fname, p_lname, p_address, p_tel, sysdate, p_type);

commit;

end;

When I try to insert values with this procedure I got error

*

ERROR on line 2:

ORA-06550: line 2, column 1:

PLS-00905: HR object. ADD_CUSTOMERS is not valid

ORA-06550: line 2, column 1:

PL/SQL: Statement ignored

Why?

Hello

If a procedure has arguments, the argument list continues inside brackets, before the AS keyword (or IS, you can use, but not both), like this:

Create procedure add_customers

(p_fname to customers.cus_fname%TYPE,

p_lname in customers.cus_lname%TYPE,

p_address in customers.cus_address%TYPE,

p_tel in customers.cus_tel%TYPE,

p_type in customers.cus_type%TYPE

)

is

start...

You had a supplement AS a keyword instead of the opening of '('.)

Tags: Database

Similar Questions

  • IKM Oracle Multi Table Insert obsolete?

    The description for 'IKM Oracle Multi Table Insert' reads:

    -Snip-

    DEPRECATED: KM has been deprecated and may be removed without notice in future versions ODI. Please use the MTI ODI mappings feature.

    -Snip-

    Can someone tell me the right way to do it in 12 c?  Everything I tried publishes two inserts instead of an insert of all.

    Thank you

    Scott

    12 c, there is now a revenge for this called "IKM Oracle down".  He doesn't appear on the physical tab and cannot be imported because it is built in.

  • By default the command of a table / inserted record seems to be at the forefront

    I'm ready to be confused with the result of the insert function and order 'default' a table while I practice with the employee, EMP table

    After inserting a new row in the EMP table, I tried to show the result with SELECT * FROM EMP and found that the last record inserted appeared on the first line of the table.

    SQL > INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES ('& EMPNO ',' & ENAME', ' & JOB ");

    Enter the value for empno: 1234

    Enter the value of ename: JIMMY

    Enter the value of job: MANAGER

    old 1: INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES ('& EMPNO ',' & ENAME', ' & JOB ")

    new 1: INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES ("1234", "JIMMY", "MANAGER")

    SQL > SELECT * FROM EMP;

    EMPNO, ENAME, JOB HIREDATE DEPTNO COMM SAL MGR

    ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------

    1234 JIMMY MANAGER

    7369 SMITH CLERK 7902 17/12/1980 800 20

    7499 ALLEN SALESMAN 7698 20/02/1981 1600 300 30

    7521 WARD SALESMAN 7698 22/02/1981 1250 500 30

    7566 JONES MANAGER 02/04/1981 7839, 2975 20

    7654 MARTIN SALESMAN 7698 28/09/1981 1250 1400 30

    7698 BLAKE MANAGER 01/05/1981 7839, 2850 30

    7782 CLARK MANAGER 7839 09/06/1981 2450 10

    7788, SCOTT, ANALYST, 7566 04/19/1987 3000 20

    PRESIDENT OF KING 7839 17/11/1981 5000 10

    7844 TURNER SALESMAN 7698 08/09/1981 1500 0 30

    7876 ADAMS CLERK 7788 OF 23/05/1987, 1100 20

    7900 JAMES CLERK 7698 03/12/1981 950 30

    7902 FORD ANALYST 7566 03/12/1981 3000 20

    7934 MILLER CLERK 1300 7782 10 23/01/1982

    15 selected lines.

    Should not go to the bottom of the table since it was introduced last?

    I noticed that it was posted in the first place, because I gave the employee number is the smallest; also the empno. is the first column of the table, that it has something to do with the order?

    I does not have an ORDER BY clause when I typed in the statements.

    Is the table always controlled by the first column, by "default"?

    Also: command - line by default, you place your order for a query select in oracle - Stack Overflow

    What I found from this link: «...» "For obvious reasons, if you create a new table, inserting some rows and do a" select * "without the"where"clause, it returns the rows in the order they have been inserted." "

    This is my first post here, the result is displayed in the console can be a bit messy... as if the question is too easy or something, my apologies, I started to learn.

    Thank you!

    Hello

    As Solomon said, there is no default order for the rows of a table.

    If

    -the lines have been inserted in order by empno, and

    -the table is very small, and

    -lines don't have never updated or deleted, and

    -you select all rows in the table, and

    -you do not use the analytical functions, and

    -you do not use CONNECT BY, GROUP BY, or certain other clauses

    then exit may still be in order by empno, depending on your version and platform, but you can't count on it.  Oracle emphatically does not order for the lines as they are stored in a table, or the way in which they appear in the output when you do not use an ORDER BY clause.

  • Multi Oracle Table inserts

    Hi every1,

    Do you know how do Oracle multi-table insert in ODI 11 g.

    Thank you
    Kishore.

    Hello

    Yes, you need to import IKM Oracle Multi table Insert location of reference ODI_HOME\oracledi\xm

    In ODi 11 g, you develop project > extend your knowledge Module > expand integration (IKM) and right click on even (integration (IKM) and choose Import Modules of knowledge... it will open a window KM, you them select above the location to directory import file: (search and select the location above) below text box area, you can see all kms toll-free) , out of them, you will need to select IKM Oracle Multi Table Insert KM and click on the OK button

    Kind regards
    Phanikanth

  • Possible to insert more than once in the same table using multi table insert?

    I used multi-table insert before insert a source separate from the tables without problem.

    However, when I want to insert into the same table two or more distinct lines, I encountered a problem because when I call nextval on the sequence since this is the same sequence # will try to use the same number for two inserts, which will raise a violation of PK constraint on the 2nd insert.

    A way around this problem?

    Another option is to create the sequence with increases of 2 or however many tables, you are targeting.
    When you then specify the. NEXTVAL, you must subtract the relative number of it, apart from the first table that you insert in to.

    Something like that;

    drop table t1;
    
    create table t1 (a number, b number);
    
    drop table t2;
    
    create table t2 (a number, b number);
    
    drop sequence test_seq
    /
    
    create sequence test_seq increment by 2 minvalue 0
    /
    
    insert all
    when 1 = 1 then
      into t1 (a, b) values (test_seq.nextval, 1)
    when 1 = 1 then
      into t2 (a, b) values (test_seq.nextval  - 1, 1)
    select 1, 1 from dual
    /
    
  • Table insertion behavior

    Quick question: the table Insert method sends the SQL string once or once for each link? That is, could the wire size of text sql to network problems?

    You referring to the links table, or passing an associative array? In fact, it does not matter, the sql statement is sent once in both cases. If you have messed around with SQLNet trace, you can use it to see the actuall with db communication to confirm that.

    I'm not sure what you mean by "the size of the sql text could lead to network problems.

    It will be useful,
    Greg

  • How to give the table name as input for the insertion procedure parameter

    Hello
    Could a little help in this scenario,
    Here is an example of how to insert,
    where the 'b' table name will change at each
    is there a possible way to keep the name of the table as an input parameter

    SQL > CREATE or REPLACE PROCEDURE PROC_INSERT as
    BEGIN 2
    3 INSERT INTO A
    4 (ID, NAME, LOC)
    5. SELECT ID, NAME, B LOC;
    6 VALIDATION;
    7 END;

    Kind regards
    Vikram

    If you need to pass the object name to a SQL running, you must use dynamic SQL statements.

    A simpler way is the following

    create or replace procedure proc_insert
    (
         pTableName varchar2
    )
    as
    begin
         execute immediate 'insert into a (id, name, loc) select id, name, loc from ' || pTableName;
         commit;
    end;
    
  • Limitation of Table inserts and updates.

    Hi friends,

    I learn Oracle PL/SQL.

    I need to create a table for audit purposes. I want the table to be updated only by a procedure and not by all users.

    I have also some paintings, where only a few columns must be accessible to insert or update to users. The remaining columns in this table may not be editable.

    How can I achieve this in Oracle PL/SQL. Help, please.

    Thank you

    Deepak

    I learn Oracle PL/SQL.

    I need to create a table for audit purposes. I want the table to be updated only by a procedure and not by all users.

    Place the table in diagram A. Do not give access to this table to other drawings.

    Create a procedure/package to diagram A - he can write/update the table has.

    Grant execute access to this procedure/package to other drawings.

    I have also some paintings, where only a few columns must be accessible to insert or update to users. The remaining columns in this table may not be editable.

    Something like

    grant update (col1, col2) on tableA to UserB;

    See GRANT

  • My cursor locks the table inserts

    I have a function that copies of the new lines of Database_A, Table_A to Database_B, Table_A via a database link. This happens on a regular basis and there may be around 100 k new records accumulated between these periods.

    I understand the folders that need to be copied by filtering a field "copied" on the table. In the loop, I update field copied from the line so it will not be copied during the next pass. Here's the function:
    FUNCTION copy_records RETURN INTEGER IS
    
         pCount INTEGER := 0;        
            CURSOR recs IS
                SELECT * FROM TABLE_A
                WHERE FLG_COPIED = 'N' OR FLG_COPIED IS NULL
                ORDER BY MYKEY;    -- do the oldest first (only important if we commit during iterations)              
        BEGIN
    
            pCount := 0;
        
            FOR rec IN recs LOOP
            
                -- first copy to backup db
                INSERT INTO TABLE_A@BACKUP_DB
                    (FIELD_1, FIELD_2, FIELD_3)
                VALUES 
                    (rec.FIELD_1, rec.FIELD_2, rec.FIELD_3);
            
                -- now flag as copied
                UPDATE TABLE_A
                SET FLG_COPIED = 'Y'
                WHERE MYKEY = rec.MYKEY;
                            
                -- counter sent back for logging
                pCount := pCount + 1;               
                
            END LOOP;
            
            RETURN pCount;
            
        EXCEPTION
            WHEN OTHERS THEN
                RETURN SQLCODE;
        END;
    END;
    My problem is that it is stuck on the table, while this process takes place. I'd wait a few blocking at the level of the lines, which is fine (this painting is especially INSERT only). But I do not know why it blocks such that she allow me to INSERT into the table. -This can someone explain that to me?

    If I do a VALIDATION during each iteration, I can at least perform an insert, but this seems to slow things down significantly when used through a DBLink, so I'd avoid it (more I want to run a transaction all or nothing). I'm not as sure as if the effect of the VALIDATION must achieve the online-only block, or simply reduce the window of the table locking.

    Published by: xaeryan on October 14, 2011 15:51

    xaeryan wrote:

    mtefft wrote:
    1. it is a bad programming practice to perform updates (or inserts, etc.) in a function. You must use a procedure.

    More tests to make sure that, but it appears after a PROCEDURE and nothing more, changed my blocking condition no longer exists...

    This would make sense?

    That makes no sense to me. There is no fundamental difference between a procedure and a function with regard to the processing of SQL statements mode. My guess is that your problem is:

    There is also a BITMAP index on the field FLG_COPIED

    Bitmap index and updated several unique, as you do not play well together. A single block in a bitmap index can cover a very large number of rows in the table. In addition, the index bitmap, in contrast to the B-tree index, index null values. Every time you update a row in tablea, Oracle must briefly lock two index blocks. One on the value null/N in line and the other covering the value Y of the line. This would tend to block other transactions that want to access all the lines to cover (or potentially covered) of the index blocks.

    John

  • Deliver the trigger, multi-table insert logging of errors

    I find that if I try to perform an insert multi-table with logging of errors on a table that has a trigger, then some violations of constraints result in a raised exception being as connected:
    < pre >
    SQL > select * from v version $;

    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE 11.2.0.1.0 Production
    AMT for 32-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production

    SQL > create table t1 (primary key of all id ;)

    Table created.

    SQL > create table t2 (id integer, t1_id integer primary key,
    2 constraint t2_t1_fk foreign key (t1_id) refers to t1);

    Table created.

    SQL > exec dbms_errlog.create_error_log ("T2");

    PL/SQL procedure successfully completed.

    SQL > insert all
    2 in t2 (id, t1_id)
    3 values (x, y)
    4 errors in the journal in err$ _t2 limit unlimited rejection
    5. Select 1 x, 2 double y;

    0 rows created.

    SQL > create or replace trigger t2_trg
    2 before insert or update on t2
    3 for each line
    4 start
    5 zero;
    6 end;
    5 m

    Trigger created.

    SQL > insert all
    2 in t2 (id, t1_id)
    3 values (x, y)
    4 errors in the journal in err$ _t2 limit unlimited rejection
    5. Select 1 x, 2 double y;
    Insert all
    *
    ERROR on line 1:
    ORA-02291: integrity constraint (enhanced oil recovery. T2_T1_FK) violated - key parent not found
    < code >

    This does not seem to be a documented restriction. Anyone know if this is a bug?

    Hi Tony,.

    Looks like you ran into Bug 9539578: INSERT ALL AND TRIGGER CAUSES ERROR LOGGING to FAIL (ROLLBACK)

    Concerning
    Peter

  • Returns the primary key of the new line (generated by the trigger) to an insert procedure

    Hello
    I have a table with a primary key (number), which increases with the trigger
    I use a procedure to insert data into this table
    How can I find the primary key of the row inserted to this procedure?

    When you make use of the insert:

    INSERT .... RETURNING key_column INTO variable;
    

    (where key_column is your key on the table column and variable is a variable to store the value of the same data type)

    to get the value in a variable.

  • Table accepting procedure of objects

    Hi all

    I'm working on a procedure that accepts a java code entry.

    The entrance is the array of objects.

    I desinged the da in this way, but his does not work and I have a few questions
    create table t_content (content_code number, content_name varchar2(100),content_label varchar2(100));
    
    Insert into t_content values(1,'map','maplabel');
    Insert into t_content values(2,'page','pagelabel');
    Insert into t_content values(3,'home','homelabel');
    Insert into t_content values(4,'logo','logolabel');
    
    
    *Requirement* 
    
    THe procedure will pass array of objects . Each object contains ( content_code,content_name,content_label )
    
    If the content_code is already present then update content_name and content_label columns with new values  else 
    
    Insert  the new content_code,content_name_content_label
    
    
    *I have written following code* 
    
    
    CREATE OR REPLACE TYPE obj_type as object (
          content_code  number,
          content_name varchar2(100),
          content_label  varchar2(100));
    
    CREATE OR REPLACE TYPE tbl_type is table of obj_type;
    
    
    CREATE OR REPLACE procedure har_proc (in_pr tbl_type)
    is
    
    v_content_code number;
    
    begin
    
    for i in  in_pr.first.. in_pr.last
    
    loop
    
    
     MERGE INTO t_content  a
        USING in_pr b
        ON (a.content_code = b(i).content_code)
      WHEN MATCHED THEN
        UPDATE  SET a.content_name = b(i).content_name
        
      WHEN NOT MATCHED THEN
        INSERT (content_code,content_name,content_label)
        VALUES (b(i).content_code, b(i).content_name,b(i).content_label);
    
    
    
    
    end loop;
    
    commit;
    
    end;
    /
    I'm trying to merge the table and the tbl_type. His does not work

    Issues related to the:

    can I use the command merge between a table and an object of type table?
    I can also use array of records? rather than the array of objects... What is the difference?


    Thank you
    REDA

    Published by: raj_fresher on October 5, 2009 06:33

    Hi reda, please see this example to get an idea:
    http://asktom.Oracle.com/pls/asktom/f?p=100:11:0:P11_QUESTION_ID:8912264456901 #21589700398270

  • ODI includes multi-table inserts?

    ODI interfaces are going against a single target data source.

    However, ODI can take advanced of the insert all, who may indeed have several segments against a single table?



    If not, is there a solution in ODI that can take data from a single data source and distribute it to multiple targets in a single pass?

    Hello Hans,.

    Currently we do not have the option of inserting data in multiple tables from target in a single pass

    For a need to move data in multiple tables in target, you can select one of the below method

    1. use several interfaces.

    2. use procedures ODI
    Steps: -.
    Write your select query on command on the source
    write your Insert query on command on the target

    Please let me know if you need more information on this.

    Kind regards
    Its

  • Error log can be used with multi table insert?

    I mean I want to insert into multiple tables and errors in the log for each table. Would this be possible?

    I tried something like below:

    in zzz_party)

    name,

    party_type,

    domicile_ctry_id

    ) (the values

    case

    Where rn = null then 14

    other name

    end,

    party_type,

    domicile_ctry_id

    ) Journal of log errors in zzz_err_party ("INS1")

    reject limit unlimited

    in zzz_party2)

    name,

    party_type,

    domicile_ctry_id

    ) (the values

    name,

    case

    Where rn = null then 14

    of other party_type

    end,

    domicile_ctry_id

    )

    Error log of journal zzz_err_party2 ("INS1")

    reject limit unlimited

    Select name, legal_name.

    case

    Where rownum = null then 14

    of other party_type

    end

    -t.domicile_ctry_id, rownum rn

    advantage t

    WHERE name like 'A %' and rownum < = 100

    ;

    And it does not work.

    Is there a way to do what I thought without having a separate select insert for each table with its own errors in the log?

    Whenever you have an error message the complete error message. "It doesn't work" is not an error message that others can understand.

    Looking in your statement, there are some flaws of syntax. I have fixed the. Try this

    insert all
    into zzz_party
    (
      name
    , party_type
    , domicile_ctry_id
    )
    values
    (
      case when rn=14 then  null else  name end
    , party_type
    , domicile_ctry_id
    )
    log errors into zzz_err_party ('ins1') reject limit unlimited
    into zzz_party2
    (
      name
    , party_type
    , domicile_ctry_id
    )
    values
    (
      name
    , case when rn=14 then null else party_type end
    , domicile_ctry_id
    )
    log errors into zzz_err_party2 ('ins1') reject limit unlimited
    select name
         , legal_name
         , case when rownum=14 then null else party_type end party_type
         , t.domicile_ctry_id
         , rownum rn
      from party t
     where name like 'A%'
       and rownum<=100;
    
  • drop table through procedure

    How to remove the table by using the procedure, I get the error message:

    Code

    CREATE OR REPLACE PROCEDURE drop_table IS

    BEGIN

    drop table test;

    end;

    Hello

    Shuumail wrote:

    How to remove the table by using the procedure, I get the error message:

    Code

    CREATE OR REPLACE PROCEDURE drop_table IS

    BEGIN

    drop table test;

    end;

    DROP TABLE is not a PL/SQL command; It's only a SQL command.

    To run a command SQL, PL/SQL, you can use dynamic SQL, like this:

    CREATE OR REPLACE PROCEDURE drop_table IS

    BEGIN

    EXECUTE IMMEDIATE 'drop table test;

    END;

    Why do you do this?  Using PL/SQL to create and drop objects, it is often the best 3rd or 4th way to meet certain requirements.  If you can tell which is your requirement, so someone can help you find a good way to do it in Oracle.

Maybe you are looking for