簡體   English   中英

為什么我不能在 WHERE 語句中使用我的變量?

[英]Why I can not use my variable in WHERE statement?

我聲明了一個變量user_name ,以便其他人可以更改它以在他們的筆記本電腦上運行我的腳本。 這里C##AKIRA是我在 SQL Plus 中創建的帳戶。

DECLARE
    user_name    varchar2(20);
BEGIN
    user_name := 'C##AKIRA';
END;

當我跑

SELECT
    table_name
FROM
    all_tables
WHERE
    owner = user_name

Oracle 返回錯誤ORA-00904: "USER_NAME": invalid identifier 另一方面,當我跑步時效果很好

SELECT
    table_name
FROM
    all_tables
WHERE
    owner = 'C##AKIRA'

你能詳細說明一下這個問題嗎?

-- Declare a variable called 'user_name'
DECLARE
    user_name    varchar2(20);
BEGIN
    user_name := 'C##AKIRA';
END;

-- Drop a table of it already exists
BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE works_in';
EXCEPTION
    WHEN OTHERS THEN
        IF SQLCODE != -942 THEN
            RAISE;
        END IF;
END;

-- Create a table called `works_in`
CREATE TABLE works_in (
    coded       NUMBER(2),
    codew       NUMBER(2),
    datewi      DATE,
    hourcount   NUMBER(2),
    PRIMARY KEY (coded, codew, datewi),
    FOREIGN KEY (coded) REFERENCES doctors (coded),
    FOREIGN KEY (codew) REFERENCES wards (codew)
);

SELECT
    table_name
FROM
    all_tables
WHERE
    owner = user_name

變量 user_name 的 scope 僅適用於:

DECLARE
 user_name    varchar2(20);
BEGIN
 user_name := 'C##AKIRA';
END;

您必須僅在您將使用的 pls 方法中聲明變量。

像這樣:

-- Declare a variable called 'user_name'
DECLARE
    user_name    varchar2(20);
    v_table_name varchar2(100);
BEGIN
    user_name := 'C##AKIRA';

 SELECT
 table_name
 into v_table_name 
 FROM
 all_tables
 WHERE
 owner = user_name
 and rownum = 1
 ;
END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM