【问题标题】:order by of nested table not taking variable value嵌套表的排序不采用变量值
【发布时间】:2017-09-21 19:01:31
【问题描述】:
   SELECT CAST(MULTISET(SELECT *
                          FROM TABLE(table_a)
                      ORDER BY loc_sort_column DESC
                       ) as table_a_type
               ) 
     INTO table_b
     FROM dual;

我有这个语句,它在排序后将 1 个数据集合扔到另一个嵌套表中。

我遇到的问题是它没有排序。我有一个变量 loc_sort_column ,在这种情况下它将是一个介于 1 和 11 之间的整数/数字选择列,但它不起作用。

我把 1 卡在那里,它工作正常,但它似乎不喜欢包含 1 的变量。

这是操作顺序还是什么?

【问题讨论】:

    标签: oracle plsql nested-table


    【解决方案1】:

    您正在做的是按常数排序。关注AskTom

    您不能动态返回列位置,您可以动态返回 返回一个常数、一个数字、一个常数值 - 只是一个值

    按 |

    您正在返回一个表达式 - 而不是一个序数位置。

    您可以做的是使用DECODE 函数将列位置解码为实际列。请检查我的代码示例:

    CREATE OR REPLACE TYPE my_type FORCE AS OBJECT
    (
       col_1 NUMBER
      ,col_2 NUMBER
    );
    /
    CREATE OR REPLACE TYPE my_nested_table AS TABLE of my_type;
    /
    DECLARE
      l_table_a     my_nested_table := my_nested_table();
      l_table_b     my_nested_table := my_nested_table();
      l_sort_column NUMBER := 2;
    BEGIN
      l_table_a.extend(100);
      FOR l_i IN 1..l_table_a.COUNT LOOP
        l_table_a(l_i) := my_type(ROUND(DBMS_RANDOM.RANDOM,0), ROUND(DBMS_RANDOM.RANDOM,0));
      END LOOP;
    
       SELECT CAST(
                MULTISET(
                  SELECT *
                    FROM TABLE(l_table_a)
                   ORDER BY DECODE(l_sort_column, 1, col_1
                                                , 2, col_2) DESC
                ) AS my_nested_table
              ) 
          INTO l_table_b
          FROM dual;  
    
      DBMS_OUTPUT.PUT_LINE('col_1 col_2');
      FOR l_i IN 1..l_table_b.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(l_table_b(l_i).col_1 || ' ' || l_table_b(l_i).col_2);
      END LOOP;
    END;
    /
    

    【讨论】:

    • 这在我的场景中仍然不起作用。我已经意识到,因为我试图引入不是从语句派生的值,所以这可能是一个动态语句,并且已经转而尝试使用它,但仍然存在问题
    • 那么你的方案是什么?因为它完全符合您的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多