【问题标题】:Change table's column name using stored procedure in Oracle PL/SQL使用 Oracle PL/SQL 中的存储过程更改表的列名
【发布时间】:2021-03-15 12:07:19
【问题描述】:

我是 Oracle PL/SQL 的新手。我有一个表名EMP_1812057(SAL, HIRDATE)。如何通过创建存储过程来更改其列的名称?我可以做一些事情,比如将新名称作为过程的参数传递,然后它将列名更改为该新名称吗?请给我一些例子好吗?还是谢谢。

【问题讨论】:

  • 如果这是为了学习传递值并使用它们来创建动态 sql,那很好。如果这是为了解决真正的业务问题,那么我会说您的数据模型存在严重的致命缺陷,应该 NOT 更改列名以便您需要参数驱动的过程去做吧。甚至你的表名,带有 '1812057' 元素,强烈暗示数据模型中存在进一步的缺陷,包括表名中的实际 data 内容。

标签: oracle plsql alter


【解决方案1】:

我不确定该过程的真正目的是什么(我们不会经常修改列名,而且我们很少在过程中这样做),但是 - 您可以使用带有适当 ALTER TABLE 语句的动态 SQL .

例如,将SAL 列重命名为SALARY

SQL> desc emp_1812057
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SAL                                                NUMBER
 HIREDATE                                           DATE

SQL> create or replace procedure p_emp is
  2  begin
  3    execute immediate 'alter table emp_1812057 rename column sal to salary';
  4  end;
  5  /

Procedure created.

SQL> exec p_emp

PL/SQL procedure successfully completed.

SQL> desc emp_1812057
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SALARY                                             NUMBER
 HIREDATE                                           DATE

SQL>

【讨论】:

  • 我的问题的重点是,如果您将一个新名称传递给该过程,它会将列的旧名称更改为该新名称。
  • 好的;将名称作为过程的参数传递。将其连接到 ALTER TABLE 语句的恢复部分。当心 SQL 注入(在 DBMS_ASSERT 上阅读)。
猜你喜欢
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
相关资源
最近更新 更多