Oracle 如何使用光标检查列类型?
我需要查询Oracle数据库表并检查列的数据类型。 我得到了下面的脚本,但类型_名称无法识别。我可以检查列的内容,但我需要检查表的实际类型 有人知道我怎么做吗Oracle 如何使用光标检查列类型?,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我需要查询Oracle数据库表并检查列的数据类型。 我得到了下面的脚本,但类型_名称无法识别。我可以检查列的内容,但我需要检查表的实际类型 有人知道我怎么做吗 set pagesize 1000; variable errorCode number; DECLARE cursor c1 is select theColumn from myDatabaseTable; colRec c1%ROWTYPE; BEGIN :errorCode := 0;
set pagesize 1000;
variable errorCode number;
DECLARE
cursor c1 is
select theColumn from myDatabaseTable;
colRec c1%ROWTYPE;
BEGIN
:errorCode := 0;
OPEN c1;
FETCH c1 INTO colRec;
IF colRec.TYPE_NAME <> 'CHAR' THEN
:errorCode := 1;
END IF;
CLOSE c1;
END;
/
exit :errorCode;
设置页面大小1000;
可变错误代码;
声明
光标c1为
从myDatabaseTable中选择列;
colRec c1%行类型;
开始
:错误代码:=0;
开c1;
将c1取出到colRec中;
如果colRec.TYPE_NAME'CHAR',则
:错误代码:=1;
如果结束;
关闭c1;
结束;
/
退出:错误代码;
您可以按表名和列名检入其中一个数据字典视图:dba\u tab\u cols、all\u tab\u cols或user\u tab\u cols
比如说,
select data_type
from dba_tab_cols
where table_name = 'MYTABLE'
and column_name = 'MYCOL'
如果使用dba\u tab\u cols或all\u tab\u cols视图,则还需要在查询中包含所有者:
select data_type
from dba_tab_cols
where owner = 'SCHEMA'
and table_name = 'MYTABLE'
and column_name = 'MYCOL'
您可以按表名和列名签入其中一个数据字典视图:dba\u tab\u cols、all\u tab\u cols或user\u tab\u cols 比如说,
select data_type
from dba_tab_cols
where table_name = 'MYTABLE'
and column_name = 'MYCOL'
如果使用dba\u tab\u cols或all\u tab\u cols视图,则还需要在查询中包含所有者:
select data_type
from dba_tab_cols
where owner = 'SCHEMA'
and table_name = 'MYTABLE'
and column_name = 'MYCOL'
您可以使用过程
DBMS\u SQL。通过将查询解析为游标来描述列。该过程为您提供了一个包含列、数据类型和大小的集合
col_type - gives you the datatypes.
col_name - gives you the column_names.
.. and so on.
有关详细信息,请参阅此链接
这里有一个例子
declare
cur number;
cnt number;
rec_t dbms_sql.desc_tab;
begin
cur := dbms_sql.open_cursor;
dbms_sql.parse(cur, 'select 1 id, ''Stefan'' Name from DUAL', dbms_sql.native);
dbms_sql.describe_columns(cur, cnt, rec_t );
FOR i IN 1..rec_t.COUNT
LOOP
dbms_output.put_line(rec_t(i).col_name || ' - TYPE ' || rec_t(i).col_type);
END LOOP;
dbms_sql.close_cursor(cur);
end;
/
类型是表示特定数据类型的数字。下面的列表提供了重要数据类型的编号
Datatype Number
VARCHAR2 1
NVARCHAR2 1
NUMBER 2
INTEGER 2
DATE 12
CHAR 96
NCHAR 96
CLOB 112
NCLOB 112
BLOB 113
BFILE 114
因此,您可以进行如下比较:
如果记录(i).col\u类型96,则
或者编写一个case块,例如
CASE WHEN rec_t(i).col_type=96,然后“CHAR”
并比较CASE块的输出。您可以使用过程DBMS\u SQL。通过将查询解析为游标来描述列。该过程为您提供了一个包含列、数据类型和大小的集合
col_type - gives you the datatypes.
col_name - gives you the column_names.
.. and so on.
有关详细信息,请参阅此链接
这里有一个例子
declare
cur number;
cnt number;
rec_t dbms_sql.desc_tab;
begin
cur := dbms_sql.open_cursor;
dbms_sql.parse(cur, 'select 1 id, ''Stefan'' Name from DUAL', dbms_sql.native);
dbms_sql.describe_columns(cur, cnt, rec_t );
FOR i IN 1..rec_t.COUNT
LOOP
dbms_output.put_line(rec_t(i).col_name || ' - TYPE ' || rec_t(i).col_type);
END LOOP;
dbms_sql.close_cursor(cur);
end;
/
类型是表示特定数据类型的数字。下面的列表提供了重要数据类型的编号
Datatype Number
VARCHAR2 1
NVARCHAR2 1
NUMBER 2
INTEGER 2
DATE 12
CHAR 96
NCHAR 96
CLOB 112
NCLOB 112
BLOB 113
BFILE 114
因此,您可以进行如下比较:
如果记录(i).col\u类型96,则
或者编写一个case块,例如
当rec_t(i).col_type=96时为CASE,然后为'CHAR'
并比较CASE块的输出