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 Navigator查询中定义函数_Sql_Oracle - Fatal编程技术网

在SQL Navigator查询中定义函数

在SQL Navigator查询中定义函数,sql,oracle,Sql,Oracle,我想从一段在一个查询中多次使用的SQL代码中提取一个函数。我正在寻找一种类似于以下(我发明的)语法的功能: thing1、thing2、thing3是示例中“things”表中的整数列。另外,假设f比一个加法函数更复杂 如何在查询中定义函数?在查询的WITH子句中声明函数是不可能的,但根据OOW中提供的信息,它将是12c版本。因此,现在您需要创建一个函数作为模式对象,无论它是独立函数还是包的一部分。例如: create or replace function F(p_p in number) r

我想从一段在一个查询中多次使用的SQL代码中提取一个函数。我正在寻找一种类似于以下(我发明的)语法的功能:

thing1、thing2、thing3是示例中“things”表中的整数列。另外,假设f比一个加法函数更复杂


如何在查询中定义函数?

在查询的
WITH
子句中声明函数是不可能的,但根据OOW中提供的信息,它将是12c版本。因此,现在您需要创建一个函数作为模式对象,无论它是独立函数还是包的一部分。例如:

create or replace function F(p_p in number)
return number
is
begin
  return p_p + 1;
end;
然后在查询中调用它,确保作为参数传递给函数的列的数据类型与函数的参数的数据类型相同:

select f(col1)
     , f(col2)
     , ...
     , f(coln)
  from your_table

如果您试图为动态表和表的列构建一个函数,我会这样做吗?并且不能在查询的WITH子句中声明函数

    SELECT f ( tablename,columnname1 ),
           f ( tablename,columnname2 ),
           ........
    FROM   tablename;


    Create or replace function f (tableName varchar2,ColumnName varchar2)
    Return somethingHere
    Is
        varTableName varchar2(200);
        varColumnName varchar2(200);
        varValue integer;
        t_cid           INTEGER;
        t_command       VARCHAR2(200);
    Begin
        --Get tableName
        varTableName := tableName ;
        --Get columnName
        varColumnName := ColumnName ;
        t_command := 'SELECT ' || varColumnName ||' FROM ' || varTableName;
        --Here execute dynamic sql statement
        DBMS_SQL.PARSE
        DBMS_SQL.DEFINE_COLUMN
           DBMS_SQL.EXECUTE
        --fatch row values into varValue
        DBMS_SQL.COLUMN_VALUE (..,..,varValue);
        --then do your x+1 magic here
        varValue := varValue+1
        --then output  your value.
    End;
    SELECT f ( tablename,columnname1 ),
           f ( tablename,columnname2 ),
           ........
    FROM   tablename;


    Create or replace function f (tableName varchar2,ColumnName varchar2)
    Return somethingHere
    Is
        varTableName varchar2(200);
        varColumnName varchar2(200);
        varValue integer;
        t_cid           INTEGER;
        t_command       VARCHAR2(200);
    Begin
        --Get tableName
        varTableName := tableName ;
        --Get columnName
        varColumnName := ColumnName ;
        t_command := 'SELECT ' || varColumnName ||' FROM ' || varTableName;
        --Here execute dynamic sql statement
        DBMS_SQL.PARSE
        DBMS_SQL.DEFINE_COLUMN
           DBMS_SQL.EXECUTE
        --fatch row values into varValue
        DBMS_SQL.COLUMN_VALUE (..,..,varValue);
        --then do your x+1 magic here
        varValue := varValue+1
        --then output  your value.
    End;