Sql 需要一个Oracle Pro*C程序来查询用户的所有表
我是Pro-C和Oracle的新手,但不熟悉数据库,所以我可能需要一些基本的帮助来说明我做错了什么。我编写了以下Pro*C程序来查询特定用户拥有的所有表:Sql 需要一个Oracle Pro*C程序来查询用户的所有表,sql,c,oracle,Sql,C,Oracle,我是Pro-C和Oracle的新手,但不熟悉数据库,所以我可能需要一些基本的帮助来说明我做错了什么。我编写了以下Pro*C程序来查询特定用户拥有的所有表: #include <stdio.h> EXEC SQL INCLUDE SQLCA; int main() { int i; char oraCreds[10] = "user/pass"; char tables[50][50], parts[50][50]; exec sql connect :oraCre
#include <stdio.h>
EXEC SQL INCLUDE SQLCA;
int main() {
int i;
char oraCreds[10] = "user/pass";
char tables[50][50], parts[50][50];
exec sql connect :oraCreds;
if (sqlca.sqlcode != 0) {
printf("ERROR abbreviated\n");
return(0);
}
EXEC SQL SELECT TABLE_NAME
INTO :tables
FROM USER_TABLES;
if (sqlca.sqlcode != 0) {
printf("ERROR: Could not query database for user tables\n");
printf("\tError Code: %d\n", sqlca.sqlcode);
printf("\t%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
} else {
for (i = 0; i < 50; i++) {
printf("\nTable %d: %s\n", i+1, tables[i]);
}
}
// Code below inserted here
return(0);
}
问题是user_表中有记录,在sqlplus中,我可以从user_表中选择一个典型的TABLE_名称;为了验证这一点
为了验证上述程序的一些基本功能,我在注释处插入了以下查询
EXEC SQL SELECT NAME, PART_NO
INTO :tables, :parts
FROM ITEMS;
if (sqlca.sqlcode != 0) {
printf("ERROR: Could not query database for user tables\n");
printf("\tError Code: %d\n", sqlca.sqlcode);
printf("\t%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
} else {
for (i = 0; i < 50; i++) {
printf("\nTable %d: %s\n", i+1, tables[i]);
}
}
第二个查询给出预期的结果,并为每个项目的名称打印一行
如果我理解正确的话,表user_tables是Oracle的标准部分,那么它是否有什么特殊之处会使我的查询失败?我已经开始阅读一些查询用户表的替代方法,但是我想知道为什么上面的方法不起作用。Pro*C和SQL*Plus会话是否作为同一个用户连接?是的,它们是,但我忘了提到这一点,这是个好主意
EXEC SQL SELECT NAME, PART_NO
INTO :tables, :parts
FROM ITEMS;
if (sqlca.sqlcode != 0) {
printf("ERROR: Could not query database for user tables\n");
printf("\tError Code: %d\n", sqlca.sqlcode);
printf("\t%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
} else {
for (i = 0; i < 50; i++) {
printf("\nTable %d: %s\n", i+1, tables[i]);
}
}