gpt4 book ai didi

sql - 在 SQL 中使用 %TYPE

转载 作者:行者123 更新时间:2023-12-02 01:25:20 26 4
gpt4 key购买 nike

在 PL/SQL 中,%TYPE attribute可用于将变量声明为与表中的列相同的数据类型。可以在 SQL 中使用相同或相似的功能吗?例如,在 ALTER TABLE 语句中创建,例如:

ALTER TABLE table_name
ADD column_name another_table.column%TYPE;

有什么办法吗?尝试运行上面的代码(使用更正的参数)会产生:

ORA-00911: invalid character

最佳答案

您不能使用 %TYPE在 SQL 中。

对于您的 alter table 示例,您可以使用 PL/SQL,但您需要从数据字典中提取数据类型信息,例如:

declare
stmt varchar2(4000);
begin
select 'alter table table_name add column_name ' ||
data_type || case
when data_type in ('NVARCHAR2', 'CHAR', 'TIMESTAMP')
then '(' || data_length || ')'
when data_type in ('VARCHAR2')
then '(' || char_length || case when char_used = 'C' then ' CHAR' else ' BYTE' end || ')'
when data_type in ('NUMBER')
and (data_precision is not null or data_scale is not null)
then '(' || data_precision || case
when data_scale > 0 then ',' || data_scale
end || ')'
-- handling for other types
end
into stmt
from user_tab_columns
where table_name = 'ANOTHER_TABLE'
and column_name = 'COLUMN_NAME';

dbms_output.put_line(stmt);
execute immediate stmt;
end;
/

这将产生并执行如下语句:

alter table table_name add column_name VARCHAR2(5 BYTE)

这并不漂亮,某些数据类型(尤其是 UDT)可能会让您头疼。不过,您可以将其转换为过程,并传入两个表名和列名。您还可以测试该列是否已经存在于目标表中,如果存在,它是否是预期的类型等。

关于sql - 在 SQL 中使用 %TYPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com