ITPub博客

首页 > Linux操作系统 > Linux操作系统 > dynamic PL/SQL study 小例子

dynamic PL/SQL study 小例子

原创 Linux操作系统 作者:csweiliang 时间:2010-01-14 21:25:14 0 删除 编辑

/*********************************************
 Functional: 根据提供的表的列来更新薪资
 Parameter :column_vlaue  部门或员工的ID
            emp_column    员工的部门或员工对应的列名
            amount        更新的薪资
History :   2010-01-14 created by williams     
********************************************/

CREATE OR REPLACE PROCEDURE raise_emp_salary(column_value NUMBER      --列值
                                            ,emp_column   VARCHAR2    --表的列
                                            ,amount       NUMBER) IS  --更新的金额
   v_column VARCHAR2(30);
   sql_stmt VARCHAR2(200);
BEGIN
   -- determine if a valid column name has been given as input
   SELECT column_name
   INTO v_column
   FROM user_tab_cols
   WHERE table_name = upper('EMPLOYEES_all')
   AND column_name = emp_column;
  
   sql_stmt := 'UPDATE EMPLOYEES_all SET salary = salary + :1 WHERE ' || v_column || ' = :2';
   EXECUTE IMMEDIATE sql_stmt
      USING amount, column_value;
    ---检查是否有数据 
   IF SQL%ROWCOUNT > 0 THEN
      dbms_output.put_line('Salaries have been updated for: ' || emp_column || ' = ' || column_value);
   END IF;
  
  
EXCEPTION
   WHEN no_data_found THEN
      dbms_output.put_line('Invalid Column: ' || emp_column);
     
END raise_emp_salary;

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


/*******************************************
 Functional: 根据提供的表名称和条件删除数据
 Parameter : table_name  表的名称
             condition   查询条件
 History :   2010-01-14 created by williams    
********************************************/

CREATE OR REPLACE PROCEDURE delete_rows(table_name IN VARCHAR2
                                       ,condition  IN VARCHAR2 DEFAULT NULL) AS
   where_clause VARCHAR2(100) := ' WHERE ' || condition;
   v_table      VARCHAR2(30);
BEGIN
   -- 检查表是否存在
   SELECT object_name
   INTO v_table
   FROM user_objects
   WHERE object_name = upper(table_name)
   AND object_type = 'TABLE';
   IF condition IS NULL THEN
      where_clause := NULL;
   END IF;
   EXECUTE IMMEDIATE 'DELETE FROM ' || v_table || where_clause;

EXCEPTION
   WHEN no_data_found THEN
      dbms_output.put_line('Invalid table: ' || table_name);
END;

  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13996372/viewspace-625180/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle 函数
下一篇: 动态SQL补充
请登录后发表评论 登录
全部评论

注册时间:2009-05-09

  • 博文量
    23
  • 访问量
    42475