首页 > 代码库 > 自动生成form Scripts

自动生成form Scripts

运行脚本:

begin            xxx_plsql_generator_pkg2.form_view_iud_p(p_block_name  =>CONTRACT_T                                                   ,p_table_name  =>WPC_Contract_T                                                   ,p_owner       =>apps                                                   ,p_primary_key =>FConId);end;select *        from all_tab_columns tc       where tc.table_name = upper(cux_dis_return_ifc)         and tc.owner = upper(apps)         and tc.column_name = upper(FConId);
执行脚本

  调用的pckage:

create or replace package xxx_plsql_generator_pkg is  /*==================================================    Copyright (C) LYR Consulting Co., Ltd     All rights reserved  ===================================================*/  -- Author  : luoyuren  -- Created : 2010-12-07  -- Purpose : Auto Generat Plsql Code  g_exception exception;  /******************************************************************    IN     p_block_name  Form中数据块的名称     p_table_name  需要进行操作的数据表     p_owner       数据表的owner     p_primary_key 数据表的主键    DESCEIPTOIN     此过程主要用来生成基于视图的数据块常用触发器ON-INSERT,     ON-UPDATE,ON-DELETE,ON-LOCK之代码,使用时采用PL/SQL Developer     开发工具的的Test Windows,代码执行完成后会在DBMS Output标签页     中输出相关代码,使用时将代码Copy至Oralce Form Builder的Program     Units中,分为Package Spec和Package Body,并在相应触发器中加入相     应引用代码;    ***************************************************************/   procedure form_view_iud_p(p_block_name  in varchar2                           ,p_table_name  in varchar2                           ,p_owner       in varchar2                           ,p_primary_key in varchar2);end xxx_plsql_generator_pkg;/create or replace package body xxx_plsql_generator_pkg is  /*==================================================    Copyright (C) LYR Consulting Co., Ltd     All rights reserved  ===================================================*/  g_output_first boolean := false;  g_cp_flag      number; -- conc program  g_newline      varchar2(1) := chr(10);  type column_rec_type is record(    column_name varchar2(30),    nullable    varchar2(1));  type column_tbl_type is table of column_rec_type index by binary_integer;  procedure output_msg(p_msg_data in varchar2) is  begin    if g_output_first = false    then      g_cp_flag := fnd_profile.value(CONC_REQUEST_ID);      if g_cp_flag > 0      then        null;      else        dbms_output.enable(buffer_size => 20000000);      end if;    end if;      if (g_cp_flag > 0)    then      fnd_file.put_line(fnd_file.log                       ,p_msg_data);    else      dbms_output.put_line(p_msg_data);    end if;  exception    when others then      null;  end output_msg;  procedure form_view_iud_p(p_block_name  in varchar2                           ,p_table_name  in varchar2                           ,p_owner       in varchar2                           ,p_primary_key in varchar2) is    cursor c_table is      select Y        from all_tables t       where t.table_name = upper(p_table_name)         and t.owner = upper(p_owner);      cursor c_tabcol is      select Y        from all_tab_columns tc       where tc.table_name = upper(p_table_name)         and tc.owner = upper(p_owner)         and tc.column_name = upper(p_primary_key);      cursor c_sequence is      select Y        from all_objects ao       where ao.owner = p_owner         and ao.object_type = SEQUENCE         and ao.object_name = upper(p_table_name) || _S;      cursor c_columns is      select tc.column_name            ,tc.nullable        from all_tab_columns tc       where tc.table_name = upper(p_table_name)         and tc.owner = upper(p_owner)       order by tc.column_id;      l_dummy          varchar2(1);    l_msg_data       varchar2(4000);    l_package_name   varchar2(100);    l_block_name_ext varchar2(50) := : || upper(p_block_name) || .;    l_rec_ext        varchar2(30) := rec.;      l_column_tbl   column_tbl_type;    l_column_count number := 0;    begin      if (p_block_name is null) or       (p_table_name is null) or       (p_owner is null) or       (p_primary_key is null)    then      l_msg_data := Parameter not allow null !;      raise fnd_api.g_exc_error;    end if;      -- check table exists    open c_table;    fetch c_table      into l_dummy;    if c_table%notfound    then      close c_table;      l_msg_data := Table  || upper(p_table_name) ||  not found !;      raise fnd_api.g_exc_error;    end if;    close c_table;      --check primary_key exists    open c_tabcol;    fetch c_tabcol      into l_dummy;    if c_tabcol%notfound    then      close c_tabcol;      l_msg_data := Table  || upper(p_table_name) ||                     not exists column  || upper(p_primary_key) ||  !;      raise fnd_api.g_exc_error;    end if;    close c_tabcol;      --check sequence exists    /*Open c_sequence;    Fetch c_sequence      Into l_dummy;    If c_sequence%Notfound Then      Close c_sequence;      l_msg_data := ‘Sequence ‘ || upper(p_block_name) || ‘_S not exists !‘;      Raise fnd_api.g_exc_error;    End If;    Close c_sequence;*/      -- get columns    for r in c_columns    loop      l_column_count := l_column_count + 1;      l_column_tbl(l_column_count).column_name := r.column_name;      l_column_tbl(l_column_count).nullable := r.nullable;    end loop;      if l_column_count < 1    then      l_msg_data := Not column in table  || p_table_name;      raise fnd_api.g_exc_error;    end if;      l_package_name := upper(p_block_name) || _PKG;    -- generate package special    l_msg_data := PACKAGE  || l_package_name ||  IS || g_newline ||                  g_newline;    output_msg(l_msg_data);      l_msg_data := /*=============================================================== ||                  g_newline ||                  *   Copyright (C) LYR Consulting Co., Ltd All rights reserved ||                  g_newline ||                  * =============================================================== ||                  g_newline || *    Program Name: || l_package_name;      output_msg(l_msg_data);      l_msg_data := *    Author      : || g_newline || *    Date        : ||                  g_newline || *    Purpose     : || g_newline ||                  *    Parameters  : || g_newline ||                  *    Update History || g_newline ||                  *    Version    Date         Name            Description ||                  g_newline ||                  *    --------  ----------  ---------------  --------------------;      output_msg(l_msg_data);      l_msg_data := *     V1.0                                   Creation     ||                  g_newline || * || g_newline ||                    ===============================================================*/ ||                  g_newline;      output_msg(l_msg_data);      l_msg_data :=   PROCEDURE insert_row; || g_newline ||                    PROCEDURE lock_row; || g_newline ||                    PROCEDURE update_row; || g_newline ||                    PROCEDURE delete_row; || g_newline || g_newline ||                  END  || l_package_name || ; || g_newline;      output_msg(l_msg_data);      -- generate package body    -- begin    l_msg_data := PACKAGE BODY  || l_package_name ||  IS || g_newline;    output_msg(l_msg_data);      -- insert row      /*    l_msg_data := ‘\*=====================================‘ || g_newline || ‘** PROCEDURE:  insert_row()‘ || g_newline ||                  ‘**=====================================*\‘ || g_newline || ‘PROCEDURE insert_row IS‘ || g_newline;                  */      l_msg_data := /*=============================================================== ||                  g_newline || *    Program Name:insert_row() ||                  g_newline || *    Author      : || g_newline ||                  *    Date        : || g_newline || *    Purpose     : ||                  g_newline || *    Parameters  : || g_newline ||                  *             In       X     --X的说明;      output_msg(l_msg_data);      l_msg_data := *             Out      Y     --Y的说明 || g_newline ||                  *    Update History || g_newline ||                  *    Version    Date         Name            Description ||                  g_newline ||                  *    --------  ----------  ---------------  --------------------;      output_msg(l_msg_data);      l_msg_data := *     V1.0                                   Creation     ||                  g_newline || * || g_newline ||                    ===============================================================*/ ||                  g_newline || PROCEDURE insert_row IS;      output_msg(l_msg_data);      l_msg_data :=   CURSOR row_id || g_newline ||   IS    SELECT ROWID ||                  g_newline ||        FROM  || p_table_name || g_newline ||                        WHERE  || p_primary_key ||  =  ||                  l_block_name_ext || p_primary_key || ; || g_newline;    output_msg(l_msg_data);      l_msg_data := BEGIN || g_newline;    output_msg(l_msg_data);      l_msg_data :=   fnd_standard.set_who; || g_newline;    output_msg(l_msg_data);      l_msg_data :=   IF  || l_block_name_ext || p_primary_key ||                   IS NULL THEN || g_newline ||     SELECT  ||                  upper(p_table_name) || _S.NEXTVAL || g_newline ||                        INTO  || l_block_name_ext || p_primary_key ||                  g_newline ||       FROM SYS.DUAL; || g_newline ||                    END IF; || g_newline;    output_msg(l_msg_data);      l_msg_data :=   INSERT INTO  || p_table_name ||  (;    output_msg(l_msg_data);    for i in 1 .. l_column_count    loop      if i = l_column_count      then        l_msg_data :=       || l_column_tbl(i).column_name || );      else        l_msg_data :=       || l_column_tbl(i).column_name || ,;      end if;      output_msg(l_msg_data);    end loop;    l_msg_data :=   VALUES (;    output_msg(l_msg_data);    for i in 1 .. l_column_count    loop      if i = l_column_count      then        l_msg_data :=       || l_block_name_ext || l_column_tbl(i)                     .column_name || ); || g_newline;      else        l_msg_data :=       || l_block_name_ext || l_column_tbl(i)                     .column_name || ,;      end if;      output_msg(l_msg_data);    end loop;      l_msg_data :=   OPEN row_id; || g_newline ||   FETCH row_id INTO  ||                  l_block_name_ext || ROW_ID; || g_newline ||                    IF (row_id%NOTFOUND) THEN || g_newline ||                       CLOSE row_id; || g_newline ||                       RAISE NO_DATA_FOUND; || g_newline ||   END IF; ||                  g_newline ||   CLOSE row_id; || g_newline;    output_msg(l_msg_data);      l_msg_data := END insert_row; || g_newline;    output_msg(l_msg_data);      -- lock row      --l_msg_data := ‘\*=====================================‘ || g_newline || ‘** PROCEDURE:  lock_row()‘ || g_newline ||    --              ‘**=====================================*\‘ || g_newline || ‘PROCEDURE lock_row IS‘ || g_newline;      l_msg_data := /*=============================================================== ||                  g_newline || *    Program Name:lock_row() || g_newline ||                  *    Author      : || g_newline || *    Date        : ||                  g_newline || *    Purpose     : || g_newline ||                  *    Parameters  : || g_newline ||                  *             In       X     --X的说明;      output_msg(l_msg_data);      l_msg_data := *             Out      Y     --Y的说明 || g_newline ||                  *    Update History || g_newline ||                  *    Version    Date         Name            Description ||                  g_newline ||                  *    --------  ----------  ---------------  --------------------;      output_msg(l_msg_data);      l_msg_data := *     V1.0                                   Creation     ||                  g_newline || * || g_newline ||                    ===============================================================*/ ||                  g_newline || PROCEDURE lock_row IS;      output_msg(l_msg_data);      l_msg_data :=   CURSOR c_row || g_newline ||   IS SELECT * ||                  g_newline ||        FROM  || p_table_name || g_newline ||                        WHERE rowid =  || l_block_name_ext || ROW_ID ||                  g_newline ||       FOR UPDATE OF  || p_primary_key ||                   NOWAIT; || g_newline;    output_msg(l_msg_data);      l_msg_data :=   rec     c_row%rowtype; || g_newline ||                    i NUMBER := 0; || g_newline || BEGIN || g_newline;    output_msg(l_msg_data);      l_msg_data :=   LOOP || g_newline ||     BEGIN;    output_msg(l_msg_data);      l_msg_data :=       i := i + 1; || g_newline ||       OPEN c_row; ||                  g_newline ||       FETCH c_row INTO rec;;    output_msg(l_msg_data);      l_msg_data :=       IF (c_row%NOTFOUND) THEN || g_newline ||                          CLOSE c_row; || g_newline ||                          fnd_message.set_name(‘‘FND‘‘,‘‘FORM_RECORD_DELETED‘‘); ||                  g_newline ||         fnd_message.error; || g_newline ||                          RAISE FORM_TRIGGER_FAILURE;;    output_msg(l_msg_data);      l_msg_data :=       END IF; || g_newline ||       CLOSE c_row; ||                  g_newline;    output_msg(l_msg_data);      l_msg_data :=       IF (;    output_msg(l_msg_data);    for i in 1 .. l_column_count    loop      if i = 1      then        l_msg_data :=               ;      else        l_msg_data :=           AND ;      end if;      if l_column_tbl(i).column_name = p_primary_key      then        l_msg_data := l_msg_data || ( || l_rec_ext || l_column_tbl(i)                     .column_name ||  =  || l_block_name_ext ||                      l_column_tbl(i).column_name || );      else        l_msg_data := l_msg_data || (( || l_rec_ext || l_column_tbl(i)                     .column_name ||  =  || l_block_name_ext ||                      l_column_tbl(i)                     .column_name || ) OR || g_newline ||                                     (( || l_rec_ext || l_column_tbl(i)                     .column_name ||  IS NULL) ||  AND ( ||                      l_block_name_ext || l_column_tbl(i)                     .column_name ||  IS NULL)));      end if;      output_msg(l_msg_data);    end loop;      l_msg_data :=       ) THEN || g_newline ||         RETURN; ||                  g_newline ||       ELSE || g_newline ||                          fnd_message.set_name(‘‘FND‘‘, ‘‘FORM_RECORD_CHANGED‘‘); ||                  g_newline ||         fnd_message.error; || g_newline ||                          RAISE FORM_TRIGGER_FAILURE; || g_newline ||                        END IF; || g_newline;    output_msg(l_msg_data);      l_msg_data :=     EXCEPTION || g_newline ||                        WHEN app_exception.record_lock_exception THEN ||                  g_newline ||                          app_exception.record_lock_error(i); ||                  g_newline ||     END; || g_newline ||   END LOOP; ||                  g_newline;    output_msg(l_msg_data);      l_msg_data := END lock_row; || g_newline;    output_msg(l_msg_data);      -- update row    l_msg_data := /*=============================================================== ||                  g_newline || *    Program Name:update_row() ||                  g_newline || *    Author      : || g_newline ||                  *    Date        : || g_newline || *    Purpose     : ||                  g_newline || *    Parameters  : || g_newline ||                  *             In       X     --X的说明;      output_msg(l_msg_data);      l_msg_data := *             Out      Y     --Y的说明 || g_newline ||                  *    Update History || g_newline ||                  *    Version    Date         Name            Description ||                  g_newline ||                  *    --------  ----------  ---------------  --------------------;      output_msg(l_msg_data);      l_msg_data := *     V1.0                                   Creation     ||                  g_newline || * || g_newline ||                    ===============================================================*/ ||                  g_newline || PROCEDURE update_row IS;      output_msg(l_msg_data);      l_msg_data := BEGIN || g_newline;    output_msg(l_msg_data);    l_msg_data :=   fnd_standard.set_who; || g_newline;    output_msg(l_msg_data);      l_msg_data :=   UPDATE  || p_table_name ||  SET;    output_msg(l_msg_data);    for i in 1 .. l_column_count    loop      l_msg_data :=        || rpad(l_column_tbl(i).column_name                                    ,30) ||  =  || l_block_name_ext ||                    l_column_tbl(i).column_name;      if i < l_column_count      then        l_msg_data := l_msg_data || ,;      end if;      output_msg(l_msg_data);    end loop;    l_msg_data :=   WHERE ROWID =  || l_block_name_ext || ROW_ID; ||                  g_newline;    output_msg(l_msg_data);      l_msg_data :=   IF (SQL%NOTFOUND) THEN || g_newline ||                       RAISE NO_DATA_FOUND; || g_newline ||   END IF; ||                  g_newline;    output_msg(l_msg_data);      l_msg_data := END update_row; || g_newline;    output_msg(l_msg_data);      -- delete row      --l_msg_data := ‘\*=====================================‘ || g_newline || ‘** PROCEDURE:  delete_row()‘ || g_newline ||    --                  ‘**=====================================*\‘ || g_newline || ‘PROCEDURE delete_row IS‘;      l_msg_data := /*=============================================================== ||                  g_newline || *    Program Name:delete_row() ||                  g_newline || *    Author      : || g_newline ||                  *    Date        : || g_newline || *    Purpose     : ||                  g_newline || *    Parameters  : || g_newline ||                  *             In       X     --X的说明;      output_msg(l_msg_data);      l_msg_data := *             Out      Y     --Y的说明 || g_newline ||                  *    Update History || g_newline ||                  *    Version    Date         Name            Description ||                  g_newline ||                  *    --------  ----------  ---------------  --------------------;      output_msg(l_msg_data);      l_msg_data := *     V1.0                                   Creation     ||                  g_newline || * || g_newline ||                    ===============================================================*/ ||                  g_newline || PROCEDURE delete_row IS;      output_msg(l_msg_data);      l_msg_data := BEGIN || g_newline;    output_msg(l_msg_data);      l_msg_data :=   DELETE FROM  || p_table_name || g_newline ||                    WHERE  || p_primary_key ||  =  || l_block_name_ext ||                  p_primary_key || ; || g_newline;    output_msg(l_msg_data);      l_msg_data :=   IF (SQL%NOTFOUND) THEN || g_newline ||                       RAISE NO_DATA_FOUND; || g_newline ||   END IF; ||                  g_newline;    output_msg(l_msg_data);      l_msg_data := END delete_row; || g_newline;    output_msg(l_msg_data);      -- end    l_msg_data := END  || l_package_name || ;;    output_msg(l_msg_data);    exception    when fnd_api.g_exc_error then      output_msg(l_msg_data);    when others then      output_msg(sqlerrm);  end form_view_iud_p;end xxx_plsql_generator_pkg;/