Plsql 如果列有单引号,请重命名该列
我需要使用pl/sql重命名oracle数据库中的列。例如,您有这样的表Plsql 如果列有单引号,请重命名该列,plsql,oracle11g,Plsql,Oracle11g,我需要使用pl/sql重命名oracle数据库中的列。例如,您有这样的表 CREATE TABLE TEST( id int, "'test1" varchar(80), "test2" varchar(80) ); 您需要删除其中的所有引号。我写了匿名块,问题是: ... FOR column_rec IN (SELECT column_name FROM USER_TAB_COLUMNS WHERE TABLE_NAME=ta
CREATE TABLE TEST(
id int,
"'test1" varchar(80),
"test2" varchar(80)
);
您需要删除其中的所有引号。我写了匿名块,问题是:
...
FOR column_rec IN (SELECT column_name FROM USER_TAB_COLUMNS WHERE TABLE_NAME=table_rec.TABLE_NAME) LOOP
new_column_name := column_rec.COLUMN_NAME;
new_column_name := REPLACE(new_column_name, chr(34), '');
new_column_name := REPLACE(new_column_name, chr(39), '');
...
EXECUTE IMMEDIATE
'ALTER TABLE '
|| table_rec.TABLE_NAME
|| ' RENAME COLUMN '
|| column_rec.COLUMN_NAME
|| ' TO '
|| new_column_name;
...
但是如果column\u rec.column\u NAME中只有一个引号,该脚本将失败,出现异常
ORA-01756
,这意味着没有结束引号。如何避免此异常?即使在脚本中,也只需使用双引号将列的名称括起来;例如,这项工作:
alter table test rename column "'test1" to test1
您的脚本可以编辑为:
EXECUTE IMMEDIATE
'ALTER TABLE '
|| table_rec.TABLE_NAME
|| ' RENAME COLUMN "' /* open the quote */
|| column_rec.COLUMN_NAME
|| '" TO ' /* and close */
|| new_column_name;
另外,请注意,通过这种方式,所有重命名的列都将是大写的;如果这是您需要的,做得好,否则即使是新名称也必须用双引号括起来:
...
|| '" TO "' /* and close, and reopen */
|| new_column_name || '"'; /* and close again */
即使在脚本中,也只需使用双引号来包装列的名称;例如,这项工作:
alter table test rename column "'test1" to test1
您的脚本可以编辑为:
EXECUTE IMMEDIATE
'ALTER TABLE '
|| table_rec.TABLE_NAME
|| ' RENAME COLUMN "' /* open the quote */
|| column_rec.COLUMN_NAME
|| '" TO ' /* and close */
|| new_column_name;
另外,请注意,通过这种方式,所有重命名的列都将是大写的;如果这是您需要的,做得好,否则即使是新名称也必须用双引号括起来:
...
|| '" TO "' /* and close, and reopen */
|| new_column_name || '"'; /* and close again */