用于删除表中行的PLSQL过程

时间:2014-12-01 12:40:48

标签: oracle plsql delete-row

我有一个表,我需要使用一个过程,如果在我正在调用的过程中命名它,将删除此表中名为module的行... 我怎么能这样做?

table1:
id number
module varchar2

PROC1:

input parameter --> module (optional)
if module exists then delete all rows in table1 named module
if module is null then truncate table1

1 个答案:

答案 0 :(得分:0)

根据您提供的有限信息,我已根据您的要求准备了row_delete()程序:

DELIMITER $$

CREATE PROCEDURE row_delete(
IN moduleName VARCHAR2(100))

BEGIN

DECLARE 
IF moduleName == NULL THEN
   EXECUTE IMMEDIATE 'TRUNCATE TABLE table1';
   RETURN;
END IF;

SELECT count(module)
 INTO total
 FROM table1
 WHERE WHERE module = moduleName;

CASE total
   WHEN 0 THEN
       RAISE_ERROR(-6592, 'Expecting at least one row');
   WHEN when_expression_2 THEN 
       DELETE FROM table1 WHERE module = moduleName;
       DBMS_OUTPUT.PUT_LINE( 'Removed module: ' || moduleName);
   ELSE;
END CASE;
END
$$

在数据库引擎中运行此代码。 当你把这个程序叫做:

CALL row_delete('module_name');
CALL row_delete(NULL);
CALL row_delete('XYY');

包含module_name的行将被删除。

NULL将导致截断表。

另一个值参数案例会引发异常。

谢谢。