0

我有一个 plsql 函数,我首先在 select 语句中接收另一个表的字段名称。现在我想获取另一个表的字段的值。

在变量fieldName中是我需要的表的字段名。

到目前为止我尝试了什么:

SELECT fieldName FROM prj WHERE ID = 12345

但是我正确地收到了一个错误,即字段名不存在。这该怎么做?

TIA frgtv10

4

2 回答 2

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;
于 2013-09-09T08:11:31.187 回答
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;
于 2013-09-09T08:26:55.923 回答