oracle 我想在函数PLSQL中获取列名和ID [已关闭]

vuktfyat  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(180)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。

这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
18天前关闭。
Improve this question
我尝试了这段代码,但它不起作用,我如何才能从函数中返回带有ID的特定列?

create or replace function getData(column_name varchar2,emp_id number)
 return varchar2 is 
 name varchar2(100);
 sql_stmt VARCHAR2(100);
begin 
    sql_stmt :='SELECT ' || column_name
     || ' FROM employees'||
        'WHERE EMPLOYEE_ID ='||emp_id;
     execute immediate sql_stmt into name using emp_id;
     return name;
end;   
select getData('FIRST_NAME',EMPLOYEE_ID) 
from employees
WHERE EMPLOYEE_ID=100
waxmsbnn

waxmsbnn1#

问题就出在这几行

|| ' FROM employees'||
        'WHERE EMPLOYEE_ID ='||emp_id;

它生成了SELECT FIRST_NAME FROM employeesWHERE EMPLOYEE_ID = 100语句,由于缺少空格而失败。让我们修正一下,它就可以工作了。
不过,你在做

execute immediate sql_stmt into name using emp_id;

关键字USING表示存在绑定变量,但字符串sql_stmt是硬编码的(您只是将所有内容连接起来),没有绑定变量。要使用绑定变量,请使用以下语法:

create or replace function getData(column_name varchar2,emp_id number)
 return varchar2 is 
 l_name varchar2(100);
 l_sql_stmt VARCHAR2(100);
begin 
    l_sql_stmt :='SELECT ' || column_name
     || ' FROM employees'||
        ' WHERE EMPLOYEE_ID = :emp_id';
    execute immediate l_sql_stmt into l_name using emp_id;
    return l_name;
end;   
/

SELECT getData('FIRST_NAME',100) as my_data 
  FROM employees 
 WHERE EMPLOYEE_ID=100 ;

my_data
----------
Steven

注意,绑定变量不能是列名,因此需要进行连接,并且为了可读性,我在变量前面加上了“l_”前缀。

相关问题