我有一个 plsql 函数,我首先在 select 语句中接收另一个表的字段名称。现在我想获取另一个表的字段的值。
在变量fieldName
中是我需要的表的字段名。
到目前为止我尝试了什么:
SELECT fieldName FROM prj WHERE ID = 12345
但是我正确地收到了一个错误,即字段名不存在。这该怎么做?
TIA frgtv10
尝试使用EXECUTE IMMEDIATE如下
DECLARE
sql_stmt VARCHAR2(200);
id NUMBER(8) := 12345;
colval VARCHAR2(200);
fieldName VARCHAR2(200) := 'columnname';
BEGIN
sql_stmt := 'SELECT '||fieldName||' FROM prj WHERE id = :id';
EXECUTE IMMEDIATE sql_stmt INTO colval USING id;
END;
对于这种情况,有一种不同的、更正确的方法。从表中动态选择列不是最好的主意,应该有一个单独的 SELECT 语句。
CREATE TABLE test
(
col1 NUMBER
, col2 NUMBER
);
INSERT INTO test VALUES (11, 12);
DECLARE
l_field_name VARCHAR2(30);
l_selected VARCHAR2(30);
FUNCTION col_name RETURN VARCHAR2
AS
BEGIN
RETURN 'col1';
END col_name;
BEGIN
l_field_name := col_name();
IF l_field_name = 'col1' THEN
SELECT col1
INTO l_selected
FROM test;
ELSIF l_field_name = 'col2' THEN
SELECT col2
INTO l_selected
FROM test;
ELSE
RAISE_APPLICATION_ERROR(-20000, 'Column does not exist');
END IF;
END;