gpt4 book ai didi

c++ - 有没有办法创建一个匹配表的 %rowtype 的对象类型?

转载 作者:行者123 更新时间:2023-11-27 23:57:06 25 4
gpt4 key购买 nike

我需要一个模式级类型(从 C++ 代码引用它),它总是与表的 %rowtype 记录相同(相同的字段)。遗憾的是,我不能直接从代码中使用 %rowtype,只能使用声明为

的命名类型
create type blabla is object...

有没有办法以自动方式创建它,或者我是否必须为我需要它的每个表手动创建和支持对象类型?

最佳答案

在构建对象类型时不能使用%ROWTYPE,但可以获取基于表构建类型的代码,而无需手动扫描表结构和写入类型。

假设您有这样的表:

create table someTypesTable( n   number(10),
n2 number(7, 3),
v varchar2(16),
d date,
t timestamp)

create table someOtherTypesTable( n number,
c clob,
t timestamp(3))

您可以使用 USER_TAB_COLS (或 ALL_TAB_COLUMNS、DBA_TAB_COLUMNS,具体取决于您的需要)以获取有关这些表的列的信息并构建一段代码来创建您需要的类型。

这可能是一个起点,需要改进以处理您可能在表格中遇到的不同类型:

select 'create or replace type tTab' || table_name ||
' as object ( ' ||
listagg(
column_name || ' ' ||
data_type ||
case when data_type = 'NUMBER' and data_precision is not null then '(' || data_precision || ',' || data_scale || ')'
when data_type = 'VARCHAR2' then '(' || data_length ||')'
end
, ', ' ) within group ( order by column_id) ||
')'
from user_tab_cols
where table_name in ('SOMETYPESTABLE', 'SOMEOTHERTYPESTABLE')
group by table_name

对于上面的表格,这给出了以下类型:

CREATE OR REPLACE TYPE tTabSOMEOTHERTYPESTABLE AS OBJECT
(
N NUMBER,
C CLOB,
T TIMESTAMP(3)
)

CREATE OR REPLACE TYPE tTabSOMETYPESTABLE AS OBJECT
(
N NUMBER(10, 0),
N2 NUMBER(7, 3),
V VARCHAR2(16),
D DATE,
T TIMESTAMP(6)
)

关于c++ - 有没有办法创建一个匹配表的 %rowtype 的对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41834148/

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