帮助DELETE函数并删除列

时间:2011-05-09 13:59:22

标签: sql oracle plsql

我正在为我的jsp页面编写一个删除函数,我遇到了一些麻烦,因为我希望用户只能从表中删除某些列,但保留其他列。我的jsp页面有4个表,用户可以从其中任何一个表中删除(注意“if语句”)....我知道我这里有什么不对,但这是我的尝试。任何帮助都表示赞赏,如果在servlet中处理其中的一些更好,请告诉我。

BEGIN

-- If a deletion is checked on the Lost/Found table.

  IF pLfEdit IS NOT NULL
THEN

  ALTER TABLE   BSSS
    DROP COLUMN LOST_FOUND
    DROP COLUMN LOST_LOC
  WHERE   EDIT_ID = pLfEditDel;
ELSE
  RAISE NO_DATA_FOUND;
END IF;

-- If a deletion is checked on the Returned Check table.
  IF pRcEdit IS NOT NULL
THEN

  ALTER TABLE   BSSS
    DROP COLUMN RETURN_CHECK
    DROP COLUMN RETURN_LOC
  WHERE   EDIT_ID = pRcEditDel;
ELSE
  RAISE NO_DATA_FOUND;
END IF;

-- If a deletion is checked on the Sponsor table.
  IF pSpnEdit IS NOT NULL
THEN

  ALTER TABLE   BSSS
      DROP COLUMN SPONSOR
      DROP COLUMN SPON_LOC
  WHERE   EDIT_ID = pSpnEditDel;
ELSE
  RAISE NO_DATA_FOUND;
END IF;

-- If a deletion is checked on the Comments table.
  IF pComEdit IS NOT NULL
THEN

  ALTER TABLE   BSSS
      DROP COLUMN COMMENTS
  WHERE   EDIT_ID = pComEditDel;
  ELSE
  RAISE NO_DATA_FOUND;
  END IF;

COMMIT;
RETURN 0;
EXCEPTION
WHEN OTHERS
THEN
  ROLLBACK;
  RETURN SQLCODE;
END DEL_BS_INFO;

1 个答案:

答案 0 :(得分:2)

您正在混合使用DML和DDL的概念。 DDL(例如ALTER TABLE)用于系统更改和维护,通常由DBA完成; DML(例如SELECT,INSERT,DELETE,COMMIT)用于由应用程序完成的事务。

我认为您不希望从表中删除列 - 但您希望清除某些行中各列的值。我想你要做的是将它们设置为NULL。例如:

IF pLfEdit IS NOT NULL
THEN
   UPDATE BSSS
   SET LOST_FOUND = NULL,
       LOST_LOC = NULL
   WHERE   EDIT_ID = pLfEditDel;
ELSE
   RAISE NO_DATA_FOUND;
END IF;