Creating a table in a Procedure

Hi All,
Creating a table in a procedure is recommended or not. Please share me some knowledge on what kind of implications/ problems would be if my code forced me to do like this below.
CREATE OR REPLACE
PROCEDURE P12
AS
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE T1( N NUMBER )';
--some statements
END;Thanks,

Hi,
968217 wrote:
Hi All,
Creating a table in a procedure is recommended or not. As the others have said, it is not recommended. Creating tables in PL/SQL is almost always a very bad idea.
Please share me some knowledge on what kind of implications/ problems would be if my code forced me to do like this below.What do you mean by "my code forced me to do like this"? How can your code force you to do anything?
CREATE OR REPLACE
PROCEDURE P12
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE T1( N NUMBER )';
--some statements
END;Why would you even consider doing that? Isn't it simpler to say
CREATE TABLE T1( N NUMBER );
--some statements?

Similar Messages

  • Can I create a table in a procedure submitted to job queue?

    I have created a package (with AUTHID CURRENT_USER) where some of the procedures create temporary tables to facilitate processing. These procedures run just fine when executed directly from within an anonymous block at the SQL*PLUS level. However, when I submit the procedures to the job queue (via DBMS_JOB.SUBMIT), the job is submitted successfully but fails when run. Investigating the Alert Log shows an error of insufficient privilege on the CREATE TABLE command in the procedure.
    QUESTION:
    Can I create a table from a procedure running in the Job Queue? If so, then how to get it to work? Does the job run in a different environment that needs Create Table privileges set to my schema?
    Thanks for any info you can provide.
    John

    FYI: Found the problem. In the Administrator's Guide (of course not in the supplied packages documentation about DBMS_JOB) I found:
    "How Jobs Execute
    SNP background processes execute jobs. To execute a job, the process creates a session to run the job.
    When an SNP process runs a job, the job is run in the same environment in which it was submitted and with the owner's default privileges.
    When you force a job to run using the procedure DBMS_JOB.RUN, the job is run by your user process. When your user process runs a job, it is run with your default privileges only. Privileges granted to you through roles are unavailable."
    And of course we had set up our users to get all privileges through Roles, so CREATE TABLE wasn't one of my DEFAULT PRIVILEGES!
    It sure would be nice if Oracle documentation could get its act together and provide ALL information about a topic in a logical place. The effort to find the information about privileges occurred after it took me 1/2 hour to figure out why my submissions were failing - I didn't have the ';' included in the quoted string for the procedure to be called - which I only figured out after looking at the code for DBMS_JOB where it made the note to make sure you include the ';'. Wouldn't it be good to have that MINOR DETAIL mentioned in the description of DBMS_JOB.SUBMIT?????

  • Insufficient privileges for creating a table in a procedure

    Hello,
    I have a problem with creating a table from within a procedure. The error is
    -1031 : ORA-01031: insufficient privileges
    All objects are owned by the same user, and the procedure is run under that user. This user has CREATE ANY TABLE with Admin Option rights.
    I am working with Oracle 8i.
    Can anybody tell me how I can fix this?
    Thanks, Wouter

    Does the user have the CREATE ANY TABLE privilege granted directly to it, or through a role? Stored procedures by default don't know about any privileges granted through a role.
    Justin
    Distributed Database Consulting, Inc.
    http://www.ddbcinc.com/askDDBC

  • Create Dates table as stored procedure

    I want to modify this statement to use todays date as the start date and add 50 years to insert into table instead of entering a date range and execute it as a stored procedure. Can someone help me to modify this? Thanks
    /**Drop Tables*/
    DROP TABLE [dbo].[DimDate]
    GO
    /** Create Date Dimension Table **/
    /* Create First numbers table for key generation */
    CREATE TABLE Numbers_Small (Number INT);
    INSERT INTO Numbers_Small
    VALUES (0)
    ,(1)
    ,(2)
    ,(3)
    ,(4)
    ,(5)
    ,(6)
    ,(7)
    ,(8)
    ,(9);
    GO
    /* Create Second numbers table for key generation */
    CREATE TABLE Numbers_Big (Number_Big BIGINT);
    INSERT INTO Numbers_Big (Number_Big)
    SELECT (tenthousands.number * 10000 + thousands.number * 1000 + hundreds.number * 100 + tens.number * 10 + ones.number) AS number_big
    FROM numbers_small tenthousands
    ,numbers_small thousands
    ,numbers_small hundreds
    ,numbers_small tens
    ,numbers_small ones;
    GO
    /* Create Date Dimension Table */
    CREATE TABLE [dbo].[DimDate] (
    [DateKey] [int] NOT NULL
    ,[Date] [datetime] NOT NULL
    ,[Day] [char](10) NULL
    ,[DayOfWeek] [smallint] NULL
    ,[DayOfMonth] [smallint] NULL
    ,[DayOfYear] [smallint] NULL
    ,[PreviousDay] [datetime] NULL
    ,[NextDay] [datetime] NULL
    ,[WeekOfYear] [smallint] NULL
    ,[Month] [char](10) NULL
    ,[MonthOfYear] [smallint] NULL
    ,[QuarterOfYear] [smallint] NULL
    ,[Year] [int] NULL
    GO
    /* Create Date Key and Date Fields */
    INSERT INTO [DimDate] (
    DateKey
    ,DATE
    SELECT number_big
    ,DATEADD(day, number_big, '1900-01-01') AS DATE
    FROM numbers_big
    WHERE DATEADD(day, number_big, '1900-01-01') BETWEEN '1900-01-01'
    AND '2050-12-31'
    ORDER BY number_big;
    GO
    /* Update all other fields with appropriate data. */
    UPDATE [DimDate]
    SET Day = DATENAME(DW, DATE)
    ,DayOfWeek = DATEPART(WEEKDAY, DATE)
    ,DayOfMonth = DAY(DATE)
    ,DayOfYear = DATEPART(DY, DATE)
    ,PreviousDay = DATEADD(DAY, - 1, DATE)
    ,NextDay = DATEADD(DAY, 1, DATE)
    ,WeekOfYear = DATEPART(WK, DATE)
    ,Month = DATENAME(MONTH, DATE)
    ,MonthOfYear = MONTH(DATE)
    ,QuarterOfYear = DATEPART(Q, DATE)
    ,Year = YEAR(DATE);
    GO
    /* Drop Temp Tables */
    DROP TABLE Numbers_Small;
    DROP TABLE Numbers_Big;

    SQL is a database language, so why do you want to re-compute constant data over and over, hundreds of times a day for years? UGH! 
    There are 365.2422 days per year, so a century of calender data is only 36,525 rows! Maybe 40 bytes per row? About 1.5 Kbytes  total? This will fit into main storage
    What you did post was wrong. DATE is a reserved word in SQL and it is  unit of temporal measurement. You also seem to confuse columns and fields. In SQL a field is a sub-unit of a temporal measurement (YEARS, MONTH, DAY, HOUR, MINUTE, SECOND). Please
    learn the ISO-11179 rules for data element names.
    You crammed too much in the table. The new DATE data type is only 3 bytes! Your other columns are mostly redundant and have attribute splitting problems.  Try this:
    CREATE TABLE Calendar 
    (cal_date DATE NOT NULL PRIMARY KEY,
     julian_date INTEGER NOT NULL, 
     julian_business_day INTEGER NOT NULL, 
     ordinal_date CHAR(8) NOT NULL
       CHECK (ordinal_date 
           LIKE '[12][0-9][0-9][0-9]-[0-9][0-9][0-9]') NOT NULL,
     week_date CHAR(9) NOT NULL
        CHECK (week_date LIKE '[12][0-9][0-9][0-9]W[0-5][0-9]-[0-7])
    The julianized date is a sequential number over the whole calendar. It makes temporal math easier. 
    ISO-8601 week_date is the week-within-year. This format is 'yyyyWww-d' where yyyy is the year, W is a separator token, ww is (01-53) week number and d is (1-7) day of the week. 
    There are several websites with calendars you can cut & paste, but you can start your search with: http://www.calendar-365.com/week-number.html 
    The Julian business day is a good trick. Number the days from whenever your calendar starts and repeat a number for a weekend or company holiday. 
    CREATE TABLE Calendar
    (cal_date DATE NOT NULL PRIMARY KEY, 
     julian_business_nbr INTEGER NOT NULL, 
    INSERT INTO Calendar 
    VALUES ('2007-04-05', 42), 
     ('2007-04-06', 43), -- good Friday 
     ('2007-04-07', 43), 
     ('2007-04-08', 43), -- Easter Sunday 
     ('2007-04-09', 44), 
     ('2007-04-10', 45); --Tuesday
    To compute the business days from Thursday of this week to next
     Tuesdays:
    SELECT (C2.julian_business_nbr - C1.julian_business_nbr)
      FROM Calendar AS C1, Calendar AS C2
     WHERE C1.cal_date = '2007-04-05',
       AND C2.cal_date = '2007-04-10'; 
    Why store things like the month name in the table? This is a display field, not a schema column value. It is language dependent! It is only part of a scalar value, too; why not normalize? 
    But if you need them, then use computed columns that are not materialized until needed. Also, use the SUBSTRING() for things that are not numeric. Why use SMALLINT for the day of the week?  Are you going to divide Thursday by 42? It is a name, not a numeric. 
    You saw the tricks with a Series table wanted to use them, but do not  be the boy with a new hammer who thinks everything is a nail. I find that a spreadsheet is the best way to create such a calendar table because they have so many temporal options and
    functions. 
    Also, putting the comma at the start of  a line is an old punchcard trick that we do not use any more. Back in the 1960's, it let us re-arrange the deck and re-use the cards. All it cost us was readable code –- your eyes expect to see a comma after a string,
    so this makes a twitch as you read. 
    --CELKO-- Books in Celko Series for Morgan-Kaufmann Publishing: Analytics and OLAP in SQL / Data and Databases: Concepts in Practice Data / Measurements and Standards in SQL SQL for Smarties / SQL Programming Style / SQL Puzzles and Answers / Thinking
    in Sets / Trees and Hierarchies in SQL

  • Create Table in a Procedure?

    Hey everybody!
    got a question... I would like to create a table within a procedure with a dynamic number of rows. The Input of the Procedure should be a number, and this number should determine the number of rows. Thought about something like this:
    create_table(3)
    -> rows: Seq_nb, Z1_Air, Z1_Gas, Z1_Time, Z2_Air, Z2_Gas, Z2_Time, Z3_Air, Z4_Gas, Z3_Time
    is this possible to do? All Tries to make a CREATE TABLE within the Procedure didn't work. Also, it seems to be difficult to name a row like 'Zx_Gas', x := Number
    I don't mean a temporary table, it should be a REAL table ;)
    Anybody who could help me please? Thanks in advance!!

    Is this the one you are trying to get?
    create or replace procedure create_table(num_of_cols in number) is
    num number;
    stmt varchar2(400);
    begin
    num:=num_of_cols;
    execute immediate 'drop table test_tab';
    stmt:='create table test_tab(constant_cols varchar2(30)';
    for i in 1.. num
    loop
    stmt:=stmt||', Z'||i||'_Air varchar2(30)';
    stmt:=stmt||', Z'||i||'_Gas varchar2(30)';
    stmt:=stmt||', Z'||i||'_Time varchar2(30)';
    end loop;
    stmt:=stmt||')';
    execute immediate stmt;
    end;

  • How to create Nested table in oracle stored procedure(Temp Table)

    Hi
    I am creating Nested table in stored procedure(Temp Table)
    type t_v_tbl_rec is record(cumid number,col1 varchar(50),col2 varchar(50),col3 varchar(50),col4 varchar(50),col5 varchar(50),col6 varchar(50));
    type t_v_tbl is table of t_v_tbl_rec index by binary_integer;
    V_V_TBL t_v_tbl;
    But i can't insert value in to this temp table
    Plz help me

    What is problem?
    SQL>declare
      2      type t_v_tbl_rec is record( cumid number,
      3                                  col1 varchar(50),
      4                                  col2 varchar(50),
      5                                  col3 varchar(50),
      6                                  col4 varchar(50),
      7                                  col5 varchar(50),
      8                                  col6 varchar(50) );
      9      type t_v_tbl is table of t_v_tbl_rec index by binary_integer;
    10      v_v_tbl t_v_tbl;
    11  begin
    12      v_v_tbl(1).cumid := 1;
    13      dbms_output.put_line(v_v_tbl(1).cumid);
    14  end;
    15  /
    1
    PL/SQL procedure successfully completed.

  • Creating a table/view or temporary table from within a stored procedure

    Hi Gurus,
    Can someone tell me if it is possible to create a table (or view) from within a stored procedure.
    PROBLEM:
    In fact I need to create a report at back end (without using oracle developer forms or reports). This report requires creating several tables to hold temporary report data. If I create a sql*plus script for this, i works fine, because it can run DDL and other sql or pl/sql statements sequencialy. But this sql*plus script cannot be called from application. So, application needs an stored procedure to do this task and then application call that procedure. But within stored procedure, i am unable to create table (or run any ddl statement). Can somebody help me in this?
    Thanks in Advance.

    Denis,
    The problem with Nicholas' suggestion isrelated to the fact that now you have two components
    (a table and a stored procedure)
    I don't see any problem to have "two
    components" here. After all, what about all others
    tabes ? This is only one more, but I don't understand
    why want manage less objects, that implies more code,
    more maintenance, and more difficulties to debug.
    Needless to say about performance...
    Nicolas.The same reasons apply if you were forced to declare all PL/SQL variables publicly (outside the stored proc.) rather than privately (from inside the stored proc). Naming conflicts for one. If the name that you want to use for the GTT already exists, you need to find a new name. With the SQL Server type local/private declarations, you wouldn't have that problem.
    I can see how performance would be the same or better using GTTs. If the number of records involved is low, this is likely negligable.

  • I am unable to create a table using procedure..

    Hi everyone,
    I have given CREATE ANY TABLE privilege to user A and wants to insert data into TAB1 in schema B using a procedure "INSERT INTO B.TAB1 AS SELECT * FROM A.TAB1" but it shows the message--
    PL/SQL: ORA-01031: insufficient privileges
    Which privilege user A need to do the above task.
    Thanks,
    Abhijeet

    SQL> create user a identified by a;
    SQL>create user b identified by b;
    SQL> grant connect,resource to a;
    Grant succeeded.
    SQL> grant connect,resource to b;
    Grant succeeded.
    SQL> grant create any table to a;
    Grant succeeded.
    SQL> conn a/a
    Connected.
    SQL> create table tab1 (id number);
    Table created.
    SQL> insert into tab1 values (1);
    1 row created.
    SQL> commit;
    Commit complete.
    SQL> conn b/b
    Connected.
    SQL> create table tab1 (id number);
    Table created.
    SQL> insert into b.tab1 select * from tab1;
    insert into b.tab1 select * from tab1
    ERROR at line 1:
    ORA-01031: insufficient privileges
    SQL> conn sys as sysdba
    Enter password:
    Connected.
    SQL> grant insert any table to a;
    Grant succeeded.
    SQL> conn a/a
    Connected.
    SQL> insert into b.tab1 select * from tab1;
    1 row created.
    So you need to grant “*insert any table* “ privileges to a;
    regards
    Liakat hossain

  • Re : Hw to create a table and insert records using procedures

    Hi..
    I tried to run a procedure to create tables but is givin an error message "insufficient previlages" and when i tried to run it using a anonymous block i can create the tables..so can any one help me to resolve this issue.
    Thanks in advance.
    balveer.

    You don't have the privilege on creating the procedures. Hence you are not able to create tables through procedures. where as you can create table from anonymous blocks..

  • Procedures Creating a table in Oracle

    Hi DBAs
    I am new to oracle technology.
    I have created the database using dbca.
    Is it for creating a table we just require the sql create statement.
    On a server I have two databases running. If I do a sql create statement how do I specify in which database to create the table.
    I have connect as sysdba using command
    connect / as sysdba
    Also I want to know how to create separate database logins just as we do in MS SQL Server.
    Please help...
    deepak.

    > Hi DBAs
    Few DBAs here.. mostly developers. As the topic of this forum is not Oracle RDBMS administration, but the development languages called PL/SQL and SQL.
    > I am new to oracle technology.
    Then you need to make The Oracle Manuals your best friends. Go to http://tahiti.oracle.com and find the "List of Books" for the Oracle version you are using.
    Read the following manuals:
    - Oracle® Database Concepts
    - Oracle® Database Administrator's Guide
    > Also I want to know how to create separate database logins just as we do in
    MS SQL Server.
    The two have very little in common. Oracle != MS SQL-Server.
    The best you can do is to forget about what you have learned as a DBA or developer in SQL-Server - empty the old cup of SQL-Server in order to get stuck and start drinking the Oracle brew instead.
    Databases are different. In Oracle a logical database is called a schema. Concurrency is different. Locking is different. PL/SQL is a real/proper/formal procedural programming language and not a macro scripting language like Transact SQL. Oracle has many more index types than just B+trees. And a lot more features. And instead of BCP, there is SQL*Loader, Data Pump, Export/Import and external tables. The list goes on and on.
    My suggestion is read the complete Concepts guide and then browse through the Admin guide. The SQL Reference manual contains all you need to know about Oracle. The PL/SQL Reference manual does the same for PL/SQL. And when you want to develop, make sure you have read the Application Developer's Fundamentals guide.
    And yes - this is what you need to do to learn what Oracle is, and how to use it. There are no shortcuts to being a good Oracle DBA or developer.
    If the intention is being a mediocre one then of course, don't bother. :-)

  • ODI-1228: Task PRD-create-populate-table (Procedure) fails on the target

    I get this error when trying to run PRD-create-populate-table from Oracle by example ODI
    ODI-1228: Task PRD-create-populate-table (Procedure) fails on the target ORACLE connection ODI_DATA_SERVER.
    Caused By: java.sql.SQLSyntaxErrorException: ORA-02264: name already used by an existing constraint
    ODI-1228: Task PRD-create-populate-table (Procedure) fails on the target ORACLE connection ODI_DATA_SERVER.
    Caused By: java.sql.SQLSyntaxErrorException: ORA-02264: name already used by an existing constraint
         at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91)
         at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
         at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
         at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1035)
         at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
         at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:953)
         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1224)
         at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3386)
         at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3467)
         at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
         at com.sunopsis.sql.SnpsQuery.executeUpdate(SnpsQuery.java:665)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.executeUpdate(SnpSessTaskSql.java:3218)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execStdOrders(SnpSessTaskSql.java:1785)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java:2805)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java:2515)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatAttachedTasks(SnpSessStep.java:534)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java:449)
         at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java:1954)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$2.doAction(StartSessRequestProcessor.java:322)
         at oracle.odi.core.persistence.dwgobject.DwgObjectTemplate.execute(DwgObjectTemplate.java:224)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.doProcessStartSessTask(StartSessRequestProcessor.java:246)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.access$0(StartSessRequestProcessor.java:237)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$StartSessTask.doExecute(StartSessRequestProcessor.java:794)
         at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:114)
         at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor$2.run(DefaultAgentTaskExecutor.java:82)
         at java.lang.Thread.run(Thread.java:662)

    the specified constraints name is still used. Please check if you are having the order correctly ie drop table , create and insert and check if the table is dropped , if still the constraints is there then drop it from database

  • Create external table in procedure

    i have a PL/SQL Block [ well i'm not created procedure still]
    /* Formatted on 2011/01/05 11:53 (Formatter Plus v4.8.8) */
    DECLARE
    -- create header
       p_formula_no                VARCHAR2 (200);
       p_formula_vers              NUMBER;
       p_formula_desc              VARCHAR2 (200);
       p_formula_desc2             VARCHAR2 (200);
       p_formula_class             VARCHAR2 (200);
       p_owner_organization_id     NUMBER;
       p_owner_id                  NUMBER;
       p_formula_type              NUMBER;
       p_scale_type                NUMBER;
       p_text_code                 NUMBER;
       p_last_update_date          DATE;
       p_auto_product_calc         VARCHAR2 (200);
       x_formula_id                NUMBER;
       x_return_code               VARCHAR2 (200);
       x_error_msg                 VARCHAR2 (200);
       formula_id                  NUMBER;
    -- update header
       p_formula_id                NUMBER;
       p_formula_status            VARCHAR2 (200);
       p_user_id                   NUMBER;
       p_last_update_date_orig     DATE;
       p_formulaline_id            NUMBER;
       p_line_type                 NUMBER;
       p_line_no                   NUMBER;
       p_item_id                   NUMBER;
       p_item_no                   VARCHAR2 (200);
       p_revision                  VARCHAR2 (200);
       p_qty                       NUMBER;
       p_item_um                   VARCHAR2 (200);
       p_release_type              NUMBER;
       p_scrap_factor              NUMBER;
       p_cost_alloc                NUMBER;
       p_phantom_type              NUMBER;
       p_rework_type               NUMBER;
       p_tp_formula_id             NUMBER;
       p_iaformula_id              NUMBER;
       p_scale_uom                 VARCHAR2 (200);
       p_contribute_step_qty_ind   VARCHAR2 (200);
       p_contribute_yield_ind      VARCHAR2 (200);
       p_scale_multiple            NUMBER;
       p_scale_rounding_variance   NUMBER;
       p_rounding_direction        NUMBER;
       p_by_product_type           VARCHAR2 (200);
       p_prod_percent              NUMBER;
    -- create header and update header cursors
       CURSOR c1
       IS
          SELECT DISTINCT formula_no, formula_ver, formula_desc, formula_class,
                          owner_header
                     FROM api_formula;
    -- for product cursors
       CURSOR c2
       IS
          SELECT *
            FROM api_formula
           WHERE line_type = 1;
    -- for ingredient cursors
       CURSOR c3
       IS
          SELECT *
            FROM api_formula
           WHERE line_type = -1;
       hdr                     c1%ROWTYPE;
       prod                        c2%ROWTYPE;
       ing                         c3%ROWTYPE;
    BEGIN
    -- for create and update header
       OPEN c1;
       FETCH c1
        INTO hdr;
       WHILE c1%FOUND
       LOOP
          p_formula_no := hdr.formula_no;
          p_formula_vers := hdr.formula_ver;
          p_formula_desc := hdr.formula_desc;
          p_formula_desc2 := NULL;
          p_formula_class := hdr.formula_class;
          p_owner_organization_id := 327;
          p_owner_id := 1298;
          p_formula_type := 0;
          p_scale_type := 0;
          p_text_code := 0;
          p_last_update_date := SYSDATE;
          p_auto_product_calc := 'Y';
          x_formula_id := NULL;
          x_return_code := NULL;
          x_error_msg := NULL;
          apps.gmd_formula_designer_pkg_cust.create_formula_header
                                                        (p_formula_no,
                                                         p_formula_vers,
                                                         p_formula_desc,
                                                         p_formula_desc2,
                                                         p_formula_class,
                                                         p_owner_organization_id,
                                                         p_owner_id,
                                                         p_formula_type,
                                                         p_scale_type,
                                                         p_text_code,
                                                         p_last_update_date,
                                                         p_auto_product_calc,
                                                         x_formula_id,
                                                         x_return_code,
                                                         x_error_msg
          COMMIT;
          SELECT formula_id
            INTO formula_id
            FROM fm_form_mst_b
           WHERE formula_no = hdr.formula_no;
          p_formula_id := formula_id;
          p_formula_no := NULL;
          p_formula_vers := NULL;
          p_formula_desc := NULL;
          p_formula_desc2 := NULL;
          p_formula_status := 700;
          p_formula_class := NULL;
          p_owner_organization_id := 327;
          p_owner_id := 1298;
          p_formula_type := 0;
          p_scale_type := 0;
          p_text_code := NULL;
          p_last_update_date := SYSDATE;
          p_user_id := 1298;
          p_last_update_date_orig := SYSDATE;
          p_auto_product_calc := 'Y';
          x_return_code := NULL;
          x_error_msg := NULL;
          apps.gmd_formula_designer_pkg_cust.update_formula_header
                                                         (p_formula_id,
                                                          p_formula_no,
                                                          p_formula_vers,
                                                          p_formula_desc,
                                                          p_formula_desc2,
                                                          p_formula_status,
                                                          p_formula_class,
                                                          p_owner_organization_id,
                                                          p_owner_id,
                                                          p_formula_type,
                                                          p_scale_type,
                                                          p_text_code,
                                                          p_last_update_date,
                                                          p_user_id,
                                                          p_last_update_date_orig,
                                                          p_auto_product_calc,
                                                          x_return_code,
                                                          x_error_msg
          DBMS_OUTPUT.put_line (x_return_code);
          DBMS_OUTPUT.put_line (x_error_msg);
          COMMIT;
          -- for PROD
          OPEN c2;
          FETCH c2
           INTO prod;
          WHILE c2%FOUND
          LOOP
             p_formula_id := formula_id;
             p_formulaline_id := NULL;
             p_line_type := 1;
             p_line_no := prod.line_no;
             p_item_id := prod.item_id;
             p_item_no := prod.item_name;
             p_revision := NULL;
             p_qty := prod.qty;
             p_item_um := prod.uom;
             p_release_type := 0;
             p_scrap_factor := 0;
             p_scale_type := 1;
             p_cost_alloc := 1;
             p_phantom_type := 0;
             p_rework_type := NULL;
             p_text_code := NULL;
             p_tp_formula_id := NULL;
             p_iaformula_id := NULL;
             p_scale_uom := NULL;
             p_contribute_step_qty_ind := NULL;
             p_contribute_yield_ind := NULL;
             p_scale_multiple := NULL;
             p_scale_rounding_variance := NULL;
             p_rounding_direction := NULL;
             p_by_product_type := NULL;
             p_last_update_date := SYSDATE;
             p_user_id := 1298;
             p_prod_percent := NULL;
             x_return_code := NULL;
             x_error_msg := NULL;
             apps.gmd_formula_designer_pkg.insert_formula_detail
                                                      (p_formula_id,
                                                       p_formulaline_id,
                                                       p_line_type,
                                                       p_line_no,
                                                       p_item_id,
                                                       p_item_no,
                                                       p_revision,
                                                       p_qty,
                                                       p_item_um,
                                                       p_release_type,
                                                       p_scrap_factor,
                                                       p_scale_type,
                                                       p_cost_alloc,
                                                       p_phantom_type,
                                                       p_rework_type,
                                                       p_text_code,
                                                       p_tp_formula_id,
                                                       p_iaformula_id,
                                                       p_scale_uom,
                                                       p_contribute_step_qty_ind,
                                                       p_contribute_yield_ind,
                                                       p_scale_multiple,
                                                       p_scale_rounding_variance,
                                                       p_rounding_direction,
                                                       p_by_product_type,
                                                       p_last_update_date,
                                                       p_user_id,
                                                       p_prod_percent,
                                                       x_return_code,
                                                       x_error_msg
             DBMS_OUTPUT.put_line (x_return_code);
             DBMS_OUTPUT.put_line (x_error_msg);
             COMMIT;
             FETCH c2
              INTO prod;
          END LOOP;
          -- for ing
          OPEN c3;
          FETCH c3
           INTO ing;
          WHILE c3%FOUND
          LOOP
             p_formula_id := formula_id;
             p_formulaline_id := NULL;
             p_line_type := -1;
             p_line_no := ing.line_no;
             p_item_id := ing.item_id;
             p_item_no := ing.item_name;
             p_revision := NULL;
             p_qty := ing.qty;
             p_item_um := ing.uom;
             p_release_type := 0;
             p_scrap_factor := 0;
             p_scale_type := 1;
             p_cost_alloc := 1;
             p_phantom_type := 0;
             p_rework_type := NULL;
             p_text_code := NULL;
             p_tp_formula_id := NULL;
             p_iaformula_id := NULL;
             p_scale_uom := NULL;
             p_contribute_step_qty_ind := NULL;
             p_contribute_yield_ind := NULL;
             p_scale_multiple := NULL;
             p_scale_rounding_variance := NULL;
             p_rounding_direction := NULL;
             p_by_product_type := NULL;
             p_last_update_date := SYSDATE;
             p_user_id := 1298;
             p_prod_percent := NULL;
             x_return_code := NULL;
             x_error_msg := NULL;
             apps.gmd_formula_designer_pkg.insert_formula_detail
                                                      (p_formula_id,
                                                       p_formulaline_id,
                                                       p_line_type,
                                                       p_line_no,
                                                       p_item_id,
                                                       p_item_no,
                                                       p_revision,
                                                       p_qty,
                                                       p_item_um,
                                                       p_release_type,
                                                       p_scrap_factor,
                                                       p_scale_type,
                                                       p_cost_alloc,
                                                       p_phantom_type,
                                                       p_rework_type,
                                                       p_text_code,
                                                       p_tp_formula_id,
                                                       p_iaformula_id,
                                                       p_scale_uom,
                                                       p_contribute_step_qty_ind,
                                                       p_contribute_yield_ind,
                                                       p_scale_multiple,
                                                       p_scale_rounding_variance,
                                                       p_rounding_direction,
                                                       p_by_product_type,
                                                       p_last_update_date,
                                                       p_user_id,
                                                       p_prod_percent,
                                                       x_return_code,
                                                       x_error_msg
             DBMS_OUTPUT.put_line (x_return_code);
             DBMS_OUTPUT.put_line (x_error_msg);
             COMMIT;
             FETCH c3
              INTO ing;
          END LOOP;
          FETCH c1
           INTO hdr;
       END LOOP;
       DBMS_OUTPUT.put_line (p_formula_id);
       DBMS_OUTPUT.put_line (x_return_code);
       DBMS_OUTPUT.put_line (x_error_msg);
    END;in this PL/SQL Block i'm used external table which is "API_FORMULA"
    the coding is
    create table api_formula
           ( FORMULA_NO varchar2(2000),
             FORMULA_VER NUMBER,
             FORMULA_DESC varchar2(2000),
             FORMULA_CLASS varchar2(2000),
             ORG NUMBER,
             OWNER_HEADER NUMBER,
             LINE_TYPE NUMBER,
           LINE_NO NUMBER,
             ITEM_ID NUMBER,
           ITEM_NAME VARCHAR2(2000),
           QTY NUMBER,
             UOM VARCHAR2(200),
             SCRAP_FAC NUMBER,
             SCRAP_TYPE NUMBER,
             UPDATE_DATE date,
             OWNER_LINE NUMBER,
               testt char(2)/*,
             future_use varchar2(200)*/
           organization external
           ( default directory ZAFAR
             access parameters
             ( records delimited by newline
               fields terminated by ','
             location ('HEADER.csv') 
    reject limit 100   
         ;i want this create external table statment in my Pl/SQL Block and when all the execution is complete then drop the table
    how it is possible??
    regard
    chintoo

    user11156570 wrote:
    @BluShadow
    ok .. i want to delete all rows from table in the end when execute this PL/SQLdelete all rows from what table?
    If you're referring to the external table, it's a file on the filesystem, you don't delete rows from it, you just replace/overwrite/delete the file as and when necessary.
    blushadow how i crate a reliable code.. can u suggest me?Basics of transactions... you commit when a business rule/process is complete, not for every little technical thing your code does. In your case I would expect a single commit at the end of the code.
    I don't have your tables, data or know what the code is supposed to be achieving, but you can bet your bottom dollar that if you're nesting cursor loops within each other then the code is running much slower than if you generated the data from a single SQL statement/cursor. I certainly have no clue what those procedure calls are doing, but it looks like they're using a load of OUT parameters. Are they user defined procedures or something that's part of e.g. Oracle Apps? If they're user defined I would consider redesigning all the code to use functions and pass back a structured data type with the required data.

  • How to create table in a procedure

    Dear All,
    I am new to this PLSQL.
    I want to create a table in a plsql procedure. I wrote proc but it is not working
    CREATE OR REPLACE PROCEDURE loyalty_extraction(bc VARCHAR,r VARCHAR)
    IS
    v_count NUMBER ;
    BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE' || 'R'|| r || '_bc' ||bc||'loy_batch_test' ||'AS SELECT * FROM R5_BC5_LOY_BATCH WHERE 1=2';
    EXECUTE IMMEDIATE 'SELECT COUNT(*) INTO v_count FROM R'|| r || '_bc' ||bc||'loy_batch_test';
    END;
    For Ex: If we run the proc as exec loyalty_extraction (2,2)
    output should be: a table should be created as R2_BC2_LOY_BATCH_test
    Thanks in advance.

    user9073870 wrote:
    Dear All,
    I am new to this PLSQL.
    Then add these links to your favorites to find examples and explanation regarding Oracle Database:
    http://asktom.oracle.com
    http://www.oracle.com/pls/db112/homepage
    http://www.oracle.com/pls/db102/homepage
    http://tahiti.oracle.com (all Oracle documentation)
    Creating tables on the fly (doing DDL through dynamic SQL) is usually a very bad thing to do.
    But if you insist, you could try:
    untested
    create or replace procedure loyalty_extraction(bc varchar2,r varchar2)
    is
      v_count number ;
    begin
      execute immediate 'create table '||'r'||r||'_bc'||bc||'loy_batch_test'||' as select * from r5_bc5_loy_batch where 1=2';
      execute immediate 'select count(*) from r'||r||'_bc'||bc||'loy_batch_test' into v_count ;
      dbms_output.put_line(v_count);
    end;
    /Also, when posting code, and you want it formatted, remember to use the {noformat}{noformat} tag for that.
    Put it before and after your example.
    So, when you type or paste your formatted code like this:
    {noformat}select *
    from dual;{noformat}
    it will appear as:select *
    from dual;on this forum                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Creating table types for procedures at design time: Where is the "Local Table Type" tab?

    Hello,
    I want to write a stored procedure (development perspective, repository object) and need to create a table type for the result table.I am working on HANA Studio 1.80.1 and the documentation tells me that I should open the "Local Table Types" tab. However, I do not see where this tab is.
    I get an SQLScript tab nothing else. Any hints?
    Regards,
    Andreas

    Hi ,
    Have a look on this discussion:
    Table type creation via HS repository / CDS / DDl Source
    Regards,
    Krishna Tangudu

  • Creating tables inside stored procedures

    is there a limitation as of how many tables i can cerate inside my stored proc using:
    execute immediate('CREATE TABLE xxx AS select * from yyy.... ?
    i have a stored proc that creates couple tables with the method shown above. but the compiler complains for the second create table zzz as select * from .... any idea why?
    I am attaching my procedure just in case:
    CREATE OR REPLACE
    procedure retail_cif_prep as
    begin
    begin
    execute immediate('drop table cif_retail');
    execute immediate('drop table cif_retail_wrong_ccsno');
    exception
    when others then
    null; -- or log errors other than -942 (table doesn't exist)
    end;
    execute immediate('CREATE TABLE cif_retail AS select * from cst where cstfnflag=1 and cstdatoc!=''00000000'' order by cstno');
    execute immediate('CREATE UNIQUE INDEX cif_retail_clustered ON cif_retail(CSTNO)');
    delete from cif_retail where CSTNAM='';
    execute immediate('CREATE TABLE cif_retail_wrong_ccsno AS select * from cif_retail where cstccsno not in (100, 110, 130, 900)');
    delete from cif_retail where CSTNO in (select CSTNO from if_retail_wrong_ccsno);
    end;

    Agree with 3360, this sort of things should be done beforehands.
    Basically what's happening is when you try and compile your procedure the delete statements are referencing your two tables, but I'm guessing these tables are yet to be created on the database and therefore the procedure won't compile without them.
    A dirty workaround is to put your delete statements inside execute immediate commands too.
    Then sit back, make a cup of coffee and have a good think about why on earth you are writing such poor code.

Maybe you are looking for

  • Checks are not Creating through APP

    Hi, User  not able create Checks through APP, I checked the Proposal Log: 1)none of the payment methods can be used for these items , 2)Payment not possible because of report error. Please anybodsy can help me on this

  • Scrubber problems continued. AS2/Flash CS3

    Hey guys. I'm having troubles with my scrubber on my loadbar again. As a picture says a 1000 words heres a screenshot of the problem: Basically the scrubber bar is going waaaay past the 373px I asked to stop at. I've tried messing about with telling

  • My MacBook Pro with retina keeps on showing no entry sign on startup

    Every time I try to log into my MacBook a no entry sign keeps showing!! Help! And I can't reinstall mountain lion because there is no disk for me to select

  • Error in Accessing Web service...

    Hi, This is regarding ESB. I am using a file adapter to send a .xml file.Then using a soap service in which i gave wsdl location of a web service and response from the web service is sent to a outbound file adapter(write.ext). In response file(write.

  • I cant install nw2004s in D or E drive

    HI, I am not gettting to drive to select before installation the installation is by default in c drive under c:\usr\sap by default.. How can i install my SAP in D drive? ro E drive