VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

游标支持

OCIStmtFetch2接口调用支持游标操作,可以分为可滚动和不可滚动两种。如果想要进行游标操作,在调用OCIStmtExecute接口时需要使用OCI_STMT_SCROLLABLE_READONLY模式。

  • 不可滚动是指只能往后读取,并且只有下面参数有效:

    • OCI_DEFAULT:具有与OCI_FETCH_NEXT相同的效果。
    • OCI_FETCH_NEXT:从当前位置获取下一行。
  • 可滚动是指前后都能读取参数,下列参数有效。

    • OCI_FETCH_CURRENT :获取当前行。
    • OCI_FETCH_FIRST:获取结果集中的第一行。
    • OCI_FETCH_LAST:获取结果集中的最后一行。
    • OCI_FETCH_PRIOR:将结果集定位在结果集中当前行的前一行。用户可以使用此模式从“前一行”中提取多行。
    • OCI_FETCH_ABSOLUTE:使用绝对定位获取结果集中的行号。
    • OCI_FETCH_RELATIVE:使用相对定位获取结果集中的行号。

      //测试获取 SQL 生成的结果集中的行集 
      printf("OCI_FETCH_ABSOLUTE 5\n");
      int ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_ABSOLUTE, 5, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);
      
      printf("\nOCI_FETCH_PRIOR 0\n");
      ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_PRIOR, 0, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);
      
      printf("\nOCI_FETCH_RELATIVE 3\n");
      ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_RELATIVE, 3, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);
      
      printf("\nOCI_FETCH_RELATIVE -1\n");
      ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_RELATIVE, -1, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);
      
      printf("\nOCI_FETCH_NEXT  0\n");
      ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_NEXT, 0, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);
      
      printf("\nOCI_DEFAULT  0\n");
      ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_DEFAULT, 0, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);
      
      printf("\nOCI_FETCH_CURRENT  0\n");
      ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_CURRENT, 0, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);
      
      printf("\nOCI_FETCH_LAST 0\n");
      ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_LAST, 0, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);
      
      printf("\nOCI_FETCH_FIRST 0\n");
      ret = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_FIRST, 0, 0);
      test_print(stmthp, errhp, c1, c2, c3, ret);