Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 如何在选择列表中将列值用作列名或计算符号_Sql_Oracle - Fatal编程技术网

Sql 如何在选择列表中将列值用作列名或计算符号

Sql 如何在选择列表中将列值用作列名或计算符号,sql,oracle,Sql,Oracle,我尝试将SQLITe上的查询转换为ORACLE的18C版本。 但有一个问题 我想要的是“在选择列表中使用列(字符串)值作为列名或计算符号”。 (以SQLITE为例) 带列的表 q1编号 q2编号 `calc varchar 每个列的样本记录的值为 0.1、0.2、q1+q2 然后当我使用下面的查询时 select q1, q2, (calc) * 1 from table; 结果集是 0.1,0.2,0.3 在SQLITE中,列的字符串值可以用作列名和计算符号 我试图找到与oracle

我尝试将SQLITe上的查询转换为ORACLE的18C版本。 但有一个问题

我想要的是“在选择列表中使用列(字符串)值作为列名或计算符号”。 (以SQLITE为例) 带列的表

  • q1编号
  • q2编号
  • `calc varchar
每个列的样本记录的值为

0.1、0.2、q1+q2
然后当我使用下面的查询时

select q1, q2, (calc) * 1 from table;
结果集是

0.1,0.2,0.3
在SQLITE中,列的字符串值可以用作列名和计算符号

我试图找到与oracle类似的方法,但失败了。 有没有不使用PL/SQL或动态查询的方法?

最简单的选择是

select q1, q2,
       q1 + q2 as result
from some_table;
或者,创建一个函数(如果您坚持),然后使用它:

SQL> create or replace function calc (par_1 in number, par_2 in number)
  2  return number
  3  is
  4  begin
  5    return par_1 + par_2;
  6  end;
  7  /

Function created.

SQL> with test (q1, q2) as
  2    (select 1, 8 from dual union all
  3     select -4, 24 from dual
  4    )
  5  select q1, q2, calc(q1, q2) result
  6  from test;

        Q1         Q2     RESULT
---------- ---------- ----------
         1          8          9
        -4         24         20

SQL>
最简单的选择是

select q1, q2,
       q1 + q2 as result
from some_table;
或者,创建一个函数(如果您坚持),然后使用它:

SQL> create or replace function calc (par_1 in number, par_2 in number)
  2  return number
  3  is
  4  begin
  5    return par_1 + par_2;
  6  end;
  7  /

Function created.

SQL> with test (q1, q2) as
  2    (select 1, 8 from dual union all
  3     select -4, 24 from dual
  4    )
  5  select q1, q2, calc(q1, q2) result
  6  from test;

        Q1         Q2     RESULT
---------- ---------- ----------
         1          8          9
        -4         24         20

SQL>

您可以在SQL中使用XMLquery实现这一点,如下所示

更新1:-对于q2对q1的模运算,使用
q1 mod q2
。 对于q1到电源q2,请使用
math:pow(q1,q2)
。有关更多Xquery函数的信息,请参考


您可以在SQL中使用XMLquery实现这一点,如下所示

更新1:-对于q2对q1的模运算,使用
q1 mod q2
。 对于q1到电源q2,请使用
math:pow(q1,q2)
。有关更多Xquery函数的信息,请参考


“不使用PL/SQL或动态查询”-不感谢您的编辑。这是我的第一个糟糕的问题。最后决定使用pl/sql。“不使用pl/sql或动态查询”-不感谢您的编辑。这是我第一个糟糕的问题。最后决定使用pl/sql。谢谢你的建议。但这和我想要的有些不同。在Calc列中,有许多值,如'q1/q2','q1*2+q2','q1*q2'等,我使用三列简化了问题。。。但实际上有q1~q9数字型列和Calc列。我尝试使用onequery来表示,而不用硬编码calc列的所有大小写,也不用使用函数pl/sql。你能进一步帮助我吗?我不知道SQLITE,也不知道CALC列是做什么的。但是,根据你所描述的,我不认为存在类似的情况——你必须编写自己的函数并进行所有这些计算。谢谢你的建议。但这和我想要的有些不同。在Calc列中,有许多值,如'q1/q2','q1*2+q2','q1*q2'等,我使用三列简化了问题。。。但实际上有q1~q9数字型列和Calc列。我尝试使用onequery来表示,而不用硬编码calc列的所有大小写,也不用使用函数pl/sql。你能进一步帮助我吗?我不知道SQLITE,也不知道CALC列是做什么的。但是,根据你所描述的,我不认为存在类似的情况——你必须编写自己的函数并进行所有这些计算。非常感谢。我会试试的。非常感谢你。我试试看。