我有一个plsql函数,我首先在select语句中接收另一个表的字段名。 现在我想获得另一个表的字段的值。
变量fieldName
是我需要的表的字段名。
到目前为止我尝试了什么:
SELECT fieldName FROM prj WHERE ID = 12345
但我正确地收到一个错误,即fieldname不存在。 怎么做?
TIA frgtv10
答案 0 :(得分:2)
尝试使用 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;
答案 1 :(得分:1)
对于这种情况,有一种不同的,更正确的方法。从表中动态选择列不是最佳选择。应该有一个单独的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;