在select语句中使用变量内容

时间:2013-09-09 08:03:36

标签: sql oracle plsql

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

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

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

SELECT fieldName FROM prj WHERE ID = 12345

但我正确地收到一个错误,即fieldname不存在。 怎么做?

TIA frgtv10

2 个答案:

答案 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;