sql - 甲骨文 : how to fetch data from dynamic query?

标签 sql oracle plsql

我有一个程序可以根据输入生成动态查询字符串。此查询可以从我的数据库中的任何表或联接表中进行选择,并且列名和列数未知。

现在将此查询字符串作为唯一输入,我想从结果中获取所有数据并逐行输出它们,有什么办法可以做到这一点?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
感谢 Thinkjet 的引用。我已经解决了这个问题,为了帮助其他人,这是我使用的一段代码:

        DECLARE
           v_curid    NUMBER;
           v_desctab  DBMS_SQL.DESC_TAB;
           v_colcnt   NUMBER;
           v_name_var  VARCHAR2(10000);
           v_num_var   NUMBER;
           v_date_var  DATE;
           v_row_num    NUMBER;
            p_sql_stmt VARCHAR2(1000);
        BEGIN
            v_curid := DBMS_SQL.OPEN_CURSOR;
            p_sql_stmt :='SELECT * FROM emp';
            DBMS_SQL.PARSE(v_curid, p_sql_stmt, DBMS_SQL.NATIVE);
           DBMS_SQL.DESCRIBE_COLUMNS(v_curid, v_colcnt, v_desctab);

           -- Define columns:
           FOR i IN 1 .. v_colcnt LOOP
            IF v_desctab(i).col_type = 2 THEN
                DBMS_SQL.DEFINE_COLUMN(v_curid, i, v_num_var);
                ELSIF v_desctab(i).col_type = 12 THEN
                DBMS_SQL.DEFINE_COLUMN(v_curid, i, v_date_var);
                ELSE
                DBMS_SQL.DEFINE_COLUMN(v_curid, i, v_name_var, 50);
                END IF;
            END LOOP;
            v_row_num := dbms_sql.execute(v_curid);
            -- Fetch rows with DBMS_SQL package:
            WHILE DBMS_SQL.FETCH_ROWS(v_curid) > 0 LOOP
                FOR i IN 1 .. v_colcnt LOOP
                IF (v_desctab(i).col_type = 1) THEN
                        DBMS_SQL.COLUMN_VALUE(v_curid, i, v_name_var);
                ELSIF (v_desctab(i).col_type = 2) THEN
                        DBMS_SQL.COLUMN_VALUE(v_curid, i, v_num_var);
                ELSIF (v_desctab(i).col_type = 12) THEN
                        DBMS_SQL.COLUMN_VALUE(v_curid, i, v_date_var);
                END IF;
            END LOOP;
            END LOOP;
            DBMS_SQL.CLOSE_CURSOR(v_curid);
         END;
         /

最佳答案

你可以用 DBMS_SQL 做到这一点包裹。

更新
要获得有关 DBMS_SQL 的更详细引用,请转到 here .

关于sql - 甲骨文 : how to fetch data from dynamic query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16845795/

相关文章:

oracle - 将 IN 更改为 EXISTS

java - 无法将大于 2000 字节的 LO 作为缓冲消息排队到 Oracle AQ 中

java.lang.ClassNotFoundException : com. 微软.sqlserver.jdbc.SQLServerDriver

SQL 外键数组引用非数组

sql - 相当于 Oracle XE 11.2 中 PostgreSQL 的 array_agg

database - Oracle 使用代理模式创建数据库链接

Oracle 使用参数调用作业

c++ - Qt PL/SQL-赋值运算符-字符串缓冲区太小

python - MYSQL 更新另一个表中的数据(如果存在),否则插入

sql - 在 SQL 中,添加一组与连接相对应的值