char* call_sql="SELECT TABLE_NAME,COLUMN_NAME,DATA_DEFAULT"
" FROM user_tab_columns"
" WHERE table_name in (select table_name from user_tables);"
otl_stream o(1,call_sql,db);
o.set_commit(0);
char* table_name=new char;
char* column_id=new char;
char* data_default=new char;
o>>table_name>>column_id>>data_default;
cout<<table_name<<'\t'<<column_id<<'\t'<<data_default;
程序是用来得到所有表中每个字段的默认值属性问题出在,当默认值不存在时,o>>data_default会产生错误,导致程序崩溃我要问的问题是:
1.为什么没有默认值时,会崩溃?
2.应该怎么解决,以便让我可以完整的显示所有列的默认值属性?
3.要以table_name分组显示结果,应该怎么写sql语句?我在后面加group by table_name是会出错的
解决方案 »
- 如何将Oracle中写入的数据实时的写到另一个Oracle库中?
- Oracle客户端无法连接的问题
- oracle日期转换问题 格式 '02-2月 -10'转换问题
- win7 下orcale 10g 端口被使用问题~~
- 求高效删除两个表中指定字段值相等的记录的方法!!!
- 散分.顺便公布一个新的ORACLE和JAVA的群(8412350)
- 关于时间的简单问题
- 急问:execute immediate语句是否在8.0.5中不被支持?
- 学Oracle要什么基础???
- 刚经历辞职,失业,再就业,呵呵,大家好。
- oralce怎么把一个导出的dmp其中的存储过程导入 急。。急。。急。。急。。急。。急。。急。。
- 想写一个job,每天16:00:00执行?
FROM user_tab_columns a, user_tables b
where a.table_name = b.table_name
group by a.table_name
估计是因为long数据列导致的崩溃。
解决办法:
建立一个函数如下:
CREATE OR REPLACE FUNCTION long_to_varchar2(IN_pk1 VARCHAR2,
in_pk2 VARCHAR2,
IN_COLUMN VARCHAR2,
IN_TABLE_NAME VARCHAR2,
IN_OWNER VARCHAR2 DEFAULT USER)
RETURN VARCHAR AS
TEXT_C1 LONG;
SQL_CUR VARCHAR2(2000);
L_R VARCHAR2(4000);
BEGIN
SQL_CUR := 'select ' || IN_COLUMN || ' from ' || IN_TABLE_NAME || ' where table_name =''' ||
IN_pk1 || ''' and column_name='''|| in_pk2
||'''';
DBMS_OUTPUT.PUT_LINE(SQL_CUR);
EXECUTE IMMEDIATE SQL_CUR
INTO TEXT_C1;
L_R := SUBSTR(TEXT_C1, 1, 4000);
RETURN L_R;
END;
/
--把你的sql改成如下的形式,试试:
SELECT TABLE_NAME,
COLUMN_NAME,
LONG_TO_VARCHAR2(TABLE_NAME,
COLUMN_NAME,
'DATA_DEFAULT',
'user_tab_columns',
USER) DATA_DEFAULT
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM USER_TABLES);
SELECT TABLE_NAME,
COLUMN_NAME,
nvl(LONG_TO_VARCHAR2(TABLE_NAME,
COLUMN_NAME,
'DATA_DEFAULT',
'user_tab_columns',
USER),'no default data') DATA_DEFAULT
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM USER_TABLES);
为什么会这么麻烦呢...我把data_default去掉是可以得到其他结果的