iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle12.2怎么修改表的列名
  • 562
分享到

Oracle12.2怎么修改表的列名

2024-04-02 19:04:59 562人浏览 八月长安
摘要

这篇文章主要介绍“oracle12.2怎么修改表的列名”,在日常操作中,相信很多人在Oracle12.2怎么修改表的列名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Orac

这篇文章主要介绍“oracle12.2怎么修改表的列名”,在日常操作中,相信很多人在Oracle12.2怎么修改表的列名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle12.2怎么修改表的列名”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

下面的例子将演示联机重定义使用VPD策略的表,并修改表中的一个列名,原始表jy.orders的创建语句如下:

sql> create table jy.orders(
  2  order_id number(12) primary key,
  3  order_date timestamp with local time zone constraint order_date_nn not null,
  4  order_mode varchar2(8),
  5  customer_id number(6) constraint order_customer_id_nn not null,
  6  order_status number(2),
  7  order_total number(8,2),
  8  sales_rep_id number(6),
  9  promotion_id number(6),
 10  constraint order_mode_lov
 11  check (order_mode in ('direct','online')),
 12  constraint order_total_min
 13  check (order_total >= 0));

Table created.

创建下面的jy.auth_orders函数来创建VPD策略

SQL> create or replace function jy.auth_orders(
  2  schema_var in varchar2,
  3  table_var in varchar2
  4  )
  5  return varchar2
  6  as
  7  return_val varchar2 (400);
  8  unm varchar2(30);
  9  begin
 10  select user into unm from dual;
 11  if (unm = 'jy') then
 12  return_val := null;
 13  else
 14  return_val := 'sales_rep_id = 159';
 15  end if;
 16  return return_val;
 17  end auth_orders;
 18  /

Function created.

下面执行dbms_rls.add_policy过程来使用jy.auth_orders函数来给原始表jy.orders指定VPD策略:

SQL> begin
  2  dbms_rls.add_policy(
  3  object_schema => 'jy',
  4  object_name => 'orders',
  5  policy_name => 'orders_policy',
  6  function_schema => 'jy',
  7  policy_function => 'auth_orders');
  8  end;
  9  /

PL/SQL procedure successfully completed.

在这个例子中,被重定义后表中的sales_rep_id列被修改为sale_pid。当在执行重定义过程如可修改一个或多个列或列的数据类型,那么在start_refef_table过程中对于copy_vpd_opt参数必须指定dbms_redefinition.cons_vpd_manual。

1.用要执行联机重定义操作的用户登录数据库

SQL> conn jy/jy@jypdb
Connected.

2.验证原始表是否可以执行联机重定义

SQL> begin
  2  dbms_redefinition.can_redef_table(
  3  uname => 'jy',
  4  tname => 'orders',
  5  options_flag => DBMS_REDEFINITION.CONS_USE_PK);
  6  end;
  7  /

PL/SQL procedure successfully completed.

3.创建中间表

SQL> create table jy.int_orders(
  2  order_id number(12),
  3  order_date timestamp with local time zone,
  4  order_mode varchar2(8),
  5  customer_id number(6),
  6  order_status number(2),
  7  order_total number(8,2),
  8  sales_pid number(6),
  9  promotion_id number(6));

Table created.

注意,在中间表中sales_rep_id列被修改为sales_pid。

4.开始联机重定义操作

SQL> begin
  2  dbms_redefinition.start_redef_table (
  3  uname => 'jy',
  4  orig_table => 'orders',
  5  int_table => 'int_orders',
  6  col_mapping => 'order_id order_id, order_date order_date, order_mode
  7  order_mode, customer_id customer_id, order_status
  8  order_status, order_total order_total, sales_rep_id
  9  sales_pid, promotion_id promotion_id',
 10  options_flag => dbms_redefinition.cons_use_pk,
 11  orderby_cols => null,
 12  part_name => null,
 13  copy_vpd_opt => dbms_redefinition.cons_vpd_manual);
 14  end;
 15  /

PL/SQL procedure successfully completed.

因为原始表与中间表存在不同的列名,那么copy_vpd_opt参数必须设置为dbms_redefinition.cons_vpd_manual。

5.对中间表创建VPD策略
5.1创建一个名为jy.auth_orders_sales_pid的函数来创建VPD策略,这里使用sales_pid列来代替sales_rep_id列。

SQL> create or replace function jy.auth_orders_sales_pid(
  2  schema_var in varchar2,
  3  table_var in varchar2
  4  )
  5  return varchar2
  6  as
  7  return_val varchar2 (400);
  8  unm varchar2(30);
  9  begin
 10  select user into unm from dual;
 11  if (unm = 'jy') then
 12  return_val := null;
 13  else
 14  return_val := 'sales_pid = 159';
 15  end if;
 16  return return_val;
 17  end auth_orders_sales_pid;
 18  /

Function created.

5.2执行dbms_rls.add_policy过程来使用jy.auth_orders_sales_pid函数来为中间表增加VPD策略

SQL> begin
  2  dbms_rls.add_policy (
  3  object_schema => 'jy',
  4  object_name => 'int_orders',
  5  policy_name => 'orders_policy',
  6  function_schema => 'jy',
  7  policy_function => 'auth_orders_sales_pid');
  8  end;
  9  /

PL/SQL procedure successfully completed.

6.复制依赖对象

SQL> declare
  2  num_errors pls_integer;
  3  begin
  4  dbms_redefinition.copy_table_dependents(
  5  uname => 'jy',
  6  orig_table => 'orders',
  7  int_table => 'int_orders',
  8  copy_indexes => dbms_redefinition.cons_orig_params,
  9  copy_triggers => true,
 10  copy_constraints => true,
 11  copy_privileges => true,
 12  ignore_errors => true,
 13  num_errors => num_errors);
 14  end;
 15  /

PL/SQL procedure successfully completed.

注意在这里ignore_errors参数被设置为true。原因是因为原始表对于列sales_rep_id存在索引与约束,并且在中间表中列被修改为sales_pid。

7.查询dba_redefinition_errors视图来检查是否存在错误

SQL> set long 8000
SQL> set pages 8000
SQL> column object_name heading 'object name' fORMat a20
SQL> column base_table_name heading 'base table name' format a10
SQL> column ddl_txt heading 'ddl that caused error' format a40
SQL> select object_name, base_table_name, ddl_txt from dba_redefinition_errors;

no rows selected

8.可选操作同中间表

SQL> begin
  2  dbms_redefinition.sync_interim_table(
  3  uname => 'jy',
  4  orig_table => 'orders',
  5  int_table => 'int_orders');
  6  end;
  7  /

PL/SQL procedure successfully completed.

9.完成联机重定义操作

SQL> begin
  2  dbms_redefinition.finish_redef_table(
  3  uname => 'jy',
  4  orig_table => 'orders',
  5  int_table => 'int_orders');
  6  end;
  7  /

PL/SQL procedure successfully completed.

SQL> desc jy.orders
Name         Type                              Nullable Default Comments
------------ --------------------------------- -------- ------- --------
ORDER_ID     NUMBER(12)
ORDER_DATE   TIMESTAMP(6) WITH LOCAL TIME ZONE
ORDER_MODE   VARCHAR2(8)                       Y
CUSTOMER_ID  NUMBER(6)
ORDER_STATUS NUMBER(2)                         Y
ORDER_TOTAL  NUMBER(8,2)                       Y
SALES_PID    NUMBER(6)                         Y
PROMOTION_ID NUMBER(6)                         Y

10.等待任何查询中间表的语句执行完成后将其删除

SQL> drop table jy.int_orders;
Table dropped

到此重定义操作就完成了。

到此,关于“Oracle12.2怎么修改表的列名”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle12.2怎么修改表的列名

本文链接: https://www.lsjlt.com/news/59228.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle12.2怎么修改表的列名
    这篇文章主要介绍“Oracle12.2怎么修改表的列名”,在日常操作中,相信很多人在Oracle12.2怎么修改表的列名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Orac...
    99+
    2022-10-18
  • 如何修改mysql的表名和列名
    小编给大家分享一下如何修改mysql的表名和列名,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!在mysql中,可以通过“ALTER TABLE 旧表名 RENAME  新表名;”语句...
    99+
    2022-10-18
  • mysql怎么修改列名
    这篇文章运用简单易懂的例子给大家介绍mysql怎么修改列名,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mysql怎么修改列名1..修改列名:修改stu表的gender列名为sex: ...
    99+
    2022-10-18
  • 怎么修改mysql列名称
    这篇文章主要介绍了怎么修改mysql列名称,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。修改mysql列名称的方法:首先选定一个要操作的数据表,...
    99+
    2022-10-18
  • python怎么修改Dataframe列名
    这篇文章将为大家详细讲解有关python怎么修改Dataframe列名,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解...
    99+
    2023-06-14
  • oracle中怎么修改表名
    小编给大家分享一下oracle中怎么修改表名,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!oracle如何修改表名方式一alter table old_table_name...
    99+
    2022-10-18
  • MySQL中如何修改表的名字?修改表名?
    操作过程 mysql> create table ts01 like ti_o_sms; #创建表结构.这样的建表方式,不仅仅是表的结构,连带着索引也会同时创建. Query OK, 0 rows affected (0.0...
    99+
    2016-04-10
    MySQL中如何修改表的名字?修改表名?
  • python怎么修改列表元素
    要修改列表元素,可以通过索引来访问和修改列表中的元素。可以直接使用索引来赋值给列表中的元素。下面是修改列表元素的示例代码:pytho...
    99+
    2023-10-18
    python
  • mysql怎样修改表名
    小编给大家分享一下mysql怎样修改表名,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果表示MyISAM那么可以直接去到数据库...
    99+
    2022-10-18
  • MySQL怎么修改数据表名?
     修改MySQL表名语句的关键语句”RENAME TO"其语法如下:ALTER TABLE 表名1 RENAME TO 表名2;首先打开mysql工具(以Navacate for mys...
    99+
    2022-10-18
  • mysql怎么修改表字段名
    mysql修改表字段名的方法语法格式ALTER TABLECHANGE [COLUMN][FIRST|AFTER];示例alter table user change name&n...
    99+
    2022-10-24
  • mysql中怎么修改表名称
    mysql中修改表名称的示例:打开命令行窗口,输入命令:“mysql -u root -p”。再输入密码,进入mysql。输入命令“alter table user rename user1;”即可。意思:将user表名修改为user1....
    99+
    2022-10-20
  • Pandas.DataFrame的行名和列名的修改
    目录DataFrame.rename()多个行名和列名的修改原DataFrame的修改(参数inplace)使用lambda表达式和函数进行批处理add_prefix(), add_...
    99+
    2023-02-22
    Pandas.DataFrame行名修改 Pandas.DataFrame列名修改
  • python中怎么修改列表中的值
    要修改列表中的值,可以通过索引来访问列表中的元素,并进行赋值操作。例如,假设有一个列表my_list,想要将第一个元素修改为"new...
    99+
    2023-10-18
    python
  • 修改表名的sql语句怎么写
    小编给大家分享一下修改表名的sql语句怎么写,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!修改表名的sql语句是“ALTER TABLE”语句。基本语法是:“ALTER TABLE <...
    99+
    2022-10-18
  • plsql怎么修改表字段名称
    在PL/SQL中,可以使用ALTER TABLE语句来修改表字段的名称。语法如下:ALTER TABLE table_name RE...
    99+
    2023-10-11
    plsql
  • mysql怎么增加列修改列名列属性以及删除列
    本篇内容主要讲解“mysql怎么增加列修改列名列属性以及删除列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql怎么增加列修改列名列属性以及删除列”吧! ...
    99+
    2022-10-18
  • SQLite中怎么删除,修改、重命名列
    这篇文章将为大家详细讲解有关SQLite中怎么删除,修改、重命名列,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 首先,请放弃alter吧。 sqlit...
    99+
    2022-10-18
  • Pandas.DataFrame的行名和列名如何修改
    本文小编为大家详细介绍“Pandas.DataFrame的行名和列名如何修改”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pandas.DataFrame的行名和列名如何修改”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-05
  • windows11列表名称修改不了如何解决
    这篇文章主要介绍“windows11列表名称修改不了如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows11列表名称修改不了如何解决”文章能帮助大家解决问题。windows11列表名...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作