我已运行此查询:
SELECT
OWNER,
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
(CASE
WHEN DATA_PRECISION IS NULL THEN 0
ELSE DATA_PRECISION
END) DATA_PRECISION,
(CASE
WHEN DATA_SCALE IS NULL THEN 0
ELSE DATA_SCALE
END) DATA_SCALE,
NULLABLE,
COLUMN_ID
DEFAULT_LENGTH,
DATA_DEFAULT,
(CASE
WHEN DATA_DEFAULT IS NULL THEN '0'
ELSE DATA_DEFAULT
END) DATA_DEFAULT1
FROM
all_tab_columns
WHERE
table_name LIKE 'TABLE1';
但它在列DATA\u DEFAULT中抛出一个错误:
ORA-00932:不一致的数据类型:预期字符长
00932。00000-“不一致的数据类型:预期%s得到%s”
我怎样才能解决这个问题?
谢谢
这里有一些代码如何打印你的长。你可以随心所欲地改变它。
set serveroutput on
declare
cursor c1 is
select
OWNER
,TABLE_NAME
,COLUMN_NAME
,DATA_TYPE
,DATA_LENGTH
,(CASE WHEN DATA_PRECISION IS NULL THEN 0 ELSE DATA_PRECISION END) DATA_PRECISION
,(CASE WHEN DATA_SCALE IS NULL THEN 0 ELSE DATA_SCALE END) DATA_SCALE
,NULLABLE
,COLUMN_ID
,DEFAULT_LENGTH
,DATA_DEFAULT
from all_Tab_columns where table_name='ENTITIES' and default_length is not null;
v_long long;
v_varchar2 varchar2(4000);
begin
for loop1 in c1
loop
v_long := loop1.DATA_DEFAULT;
v_varchar2 := substr(v_long,1,4000);
dbms_output.put_line(v_varchar2);
end loop;
end;
您不能对LONG
做任何事情。Oracle仍然在数据字典中使用它们的PITA。
您可以使用XML:
select owner
, table_name
, column_name
, data_type
, data_length
, case
when data_precision is null then 0
else data_precision
end data_precision
, case
when data_scale is null then 0
else data_scale
end data_scale
, nullable
, column_id
, default_length
, case
when default_length is null then '0'
else
extractvalue
( dbms_xmlgen.getxmltype
( 'select data_default from user_tab_columns where table_name = ''' || c.table_name || ''' and column_name = ''' || c.column_name || '''' )
, '//text()' )
end as data_default
from all_tab_columns c
where table_name like 'TABLE1';
从12.1开始,您可以内联编写自己的查找函数:
with
function get_default(tab varchar2, col varchar2) return varchar2
as
dflt varchar2(4000);
begin
select c.data_default into dflt
from user_tab_columns c
where c.table_name = upper(tab)
and c.column_name = upper(col);
return dflt;
end get_default;
select owner
, table_name
, column_name
, data_type
, data_length
, case
when data_precision is null then 0
else data_precision
end data_precision
, case
when data_scale is null then 0
else data_scale
end data_scale
, nullable
, column_id
, default_length
, get_default(c.table_name, c.column_name) as data_default
from all_tab_columns c
where table_name like 'TABLE1%'
/
当然,也可以制作一个独立的函数或包函数来做同样的事情。
问题内容: 我试图识别具有默认值NULL或未设置默认值的数据库列。为此,我正在执行查询。 在此查询的输出中,我正在获取未设置默认值(空)的列,但是我没有在获取默认值是NULL的列 问题答案: 在oracle中(至少11g),如果您不为列提供默认值,就好比给它。 看这个例子 更新 感谢@pratik garg的评论,现在我了解到您所要求的是一种查询列的方法。 由于如@PratikGrag所述,当您定
例如: 是否有一种方法可以指定默认情况下总是添加的所有条件,而不在代码本身中提及它?在Hibernate core中有一个注释,但它不能用于mongo文档。
问题内容: 我有一张带有Clob列的表。需要执行基于Clob列内容的搜索。然而 失败但 似乎很好。oracle如何处理Clob列上的过滤。它仅支持’like’子句,不支持=,!=等。是否与其他数据库(如mysql,postgres等)相同 另外,在像Hibernate这样的实现JPA的框架中如何处理这种情况? 问题答案: 是的,这是不允许的(此限制不影响S IN PL / SQL比较)采用比较运营
问题内容: 我正在运行一个非常简单的查询,但是对于某些结果,一个字段中的值为空。如果该值为null,如何将其设置为“字符串”? 就像是 它将在sql server 2005上运行 谢谢 问题答案: 使用以下内容: 或@Lieven指出: COALESCE的动态之处在于您可以定义更多的参数,因此,如果第一个为null,则获取第二个参数,如果第二个为null,则获取第三个,依此类推…
问题内容: 在Oracle 11g中工作时,我需要在表中存在一个输入值时选择一个与该输入值相对应的数据,而在不存在时选择一个静态默认值。我能找到的最好的方法是编写如下代码: 似乎必须有一些惯用的方法来执行此操作,而这并不依赖于对的奇怪使用,但我找不到它。有谁知道更好的方法吗? 问题答案: 这应该是您所做的工作的简单版本:
我试图在jQuery数据表中包含一个不可见的列,该列可以设置为default,以代替数据源中遇到的null或未定义的列。 假设我正在使用一个6列数据表。前5列可见。第6列设置为不可见。并且它必须包含true或false,而不管数据源对象是否具有相应的键。在DataTable的列定义中,我尝试了这个方法,但没有成功。 根据API,我认为仅在为空时才起作用。也许这就是它不起作用的原因。我提供了超文本标