Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 需要一个Oracle Pro*C程序来查询用户的所有表_Sql_C_Oracle - Fatal编程技术网

Sql 需要一个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

我是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 :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]);
  }
}