【问题标题】:Oracle SQL using variable in Select or For-LoopOracle SQL 在 Select 或 For-Loop 中使用变量
【发布时间】:2017-09-23 14:35:35
【问题描述】:

我需要跨多个表验证数据。本质上,我想为下面的语句编写一个循环,其中包含给定表中的所有字段。

sql> select fld1, count(*)
from table1
group by fld1
;

我认为我需要创建至少 2 个变量。将提示第一个变量提供表名。

第二个变量将基于以下结果:

select column_name from user_tab_col_statistics where table_name = table_variable

我还应该创建一个临时表并选择其中吗?

【问题讨论】:

    标签: sql oracle for-loop plsql


    【解决方案1】:

    据我了解,您可以将值存储在临时表中。

    1.Fetch Table Name & Column Name put in Variable Var_Table_name,Var_Col

    select Var_Col, count(*) into Var1,Var2 from Var_Table group by fld1 ;
    

    对于所有表列。您可以创建一个临时表并插入下面提到的值并存储在临时表中。

    1.Var_Table_name

    2.Var_Col

    3.Var1

    4.Var2

    【讨论】:

      【解决方案2】:

      PL/SQL 不提示。另一方面,SQL*Plus 将提示替换变量。请参阅以下示例。

      MPOWEL01> @stack
      MPOWEL01>
      MPOWEL01> select table_name, column_name from user_tab_col_statistics where table_name = upper('&tbl_nm')
        2  order by column_name;
      Enter value for tbl_nm: marktest
      old   1: select table_name, column_name from user_tab_col_statistics where table_name = upper('&tbl_nm')
      new   1: select table_name, column_name from user_tab_col_statistics where table_name = upper('marktest')
      
      TABLE_NAME                     COLUMN_NAME
      ------------------------------ ------------------------------
      MARKTEST                       FLD1
      MARKTEST                       FLD2
      MARKTEST                       FLD3
      MARKTEST                       FLD4
      
      MPOWEL01>
      

      set verify off 将从输出中删除替换消息行。

      在 PL/SQL 中,您要么需要 SELECT INTO 变量,要么使用游标。

      我认为您可能只是能够使用 SQL 来生成您想要运行的 SELECT 语句,但您所说的“验证数据”到底是什么意思?怎么验证?使用什么标准?

      【讨论】:

        猜你喜欢
        • 2021-05-18
        • 1970-01-01
        • 2013-08-01
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        • 2018-05-07
        • 2012-07-17
        相关资源
        最近更新 更多