PL / SQL UPDATE - 好吧,不更新

时间:2014-05-05 22:06:20

标签: plsql sql-update

我正在使用程序

CREATE OR REPLACE PROCEDURE update_rec(
    page_id   IN SSC_Page_Map.Page_ID_NBR%TYPE,
    page_type IN SSC_Page_Map.Page_Type%TYPE,
    page_dcpn IN SSC_Page_Map.Page_Dcpn%TYPE)
IS
BEGIN
  UPDATE SSC_Page_Map
  SET Page_Type     = page_type,
    Page_Dcpn       = page_dcpn
  WHERE Page_ID_NBR = page_id;
  COMMIT;
END;

更新我的数据库表行。我确认程序正确执行但我没有看到更新。我已经注释了更新以确认我有权修改数据库并且成功。

2 个答案:

答案 0 :(得分:3)

SET Page_Type = page_type使用当前列值更新列。

PL / SQL程序中的可见性规则使得列名优先于您的参数名。给你的参数一个不同的名字,一切都应该没问题。常见的编码约定是在p_前面添加参数,以将它们标识为参数:

CREATE OR REPLACE PROCEDURE update_rec(p_page_id IN SSC_Page_Map.Page_ID_NBR%TYPE, 
                                       p_page_type IN SSC_Page_Map.Page_Type%TYPE, 
                                       p_page_dcpn IN SSC_Page_Map.Page_Dcpn%TYPE)

IS
BEGIN
   UPDATE SSC_Page_Map 
       SET Page_Type = p_page_type, 
           Page_Dcpn = p_page_dcpn 
   WHERE Page_ID_NBR = p_page_id;
   COMMIT;
END;

答案 1 :(得分:0)

使用别名来消除歧义:

CREATE OR REPLACE PROCEDURE update_rec(
  page_id   IN SSC_Page_Map.Page_ID_NBR%TYPE,
  page_type IN SSC_Page_Map.Page_Type%TYPE,
  page_dcpn IN SSC_Page_Map.Page_Dcpn%TYPE)
IS
BEGIN
  UPDATE SSC_Page_Map
  SET Page_Type     = update_rec.page_type,
    Page_Dcpn       = update_rec.page_dcpn
  WHERE SSC_Page_Map.Page_ID_NBR = update_rec.page_id;
  COMMIT;
END;

(注意:我见过一个案例,有人在表中添加了一个名为p_xyz的列,这对于所有过程的命名约定为p_的客户端没有造成任何麻烦。相反,别名方法在100%的时间都有效。)