2012-10-17 148 views
1

我TABLE語句錯誤具有這種結構T_USER(用戶N,傳球,真實姓名:VARCHAR(50); 我在火鳥一個初學者,我想執行以下語句,但我得到這個錯誤:如果火鳥

if (select Count(*) as cnt FROM T_USER WHERE (usern = 'test') And (pass 
= ']')) > 0 then select T_user.realname from t_user where t_user.usern = 'test'; 

這是錯誤消息:

Error: IBPP::SQLException Context: Statement::Prepare(if (select Count(*) as cnt FROM T_USER WHERE (usern = 'test') And (pass = ']')) > 0 then select T_user.realname from t_user where t_user.usern = 'test') Message: isc_dsql_prepare failed

SQL Message : -104 Invalid token

Engine Code : 335544569 Engine Message : Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column 1 if

火鳥2.5和FlameRobin

我敢肯定,這是一個愚蠢的問題,但如果有人能幫助我,我會很感激。 在此先感謝!

+1

你不能在查詢中使用'IF',只有在PSQL(程序或'EXECUTE BLOCK')。 –

回答

3

試試這個代碼:

EXECUTE BLOCK 
    RETURNS (name VARCHAR(50)) 
AS 
    DECLARE VARIABLE C INTEGER; 
BEGIN 
    select Count(*) 
    FROM T_USER 
    WHERE usern = 'test' And pass = ']' 
    INTO :C; 

    IF (:C > 0) THEN 
    select T_user.realname 
    from t_user 
    where t_user.usern = 'test' 
    into :name; 
    ELSE 
    name = NULL; 

    SUSPEND; 
END 
+1

'SUSPEND'在這裏沒有必要,因爲它只會返回一行。 –

+0

@ Andrej:謝謝! –

+0

@Andrej:你可以給我看一個帶輸入參數的樣本嗎?因爲我在下面嘗試了這一點,但它給了我一個錯誤; EXECUTE BLOCK(username varchar(50),password varchar(50)) RETURNS(name VARCHAR(50)) AS DECLARE VARIABLE C INTEGER; BEGIN select count(*) FROM T_USER WHERE usern =:username和pass =:密碼 INTO:C; IF(C> 0)THEN 從T_USER 選擇T_user.realname 其中t_user.usern =:utilizator 成:名稱; ELSE name = NULL; 暫停; END; –

0
IF ((SELECT COUNT(*) AS CNT 
    FROM T_USER 
    WHERE (USERN = 'test') 
      AND (PASS = ']')) > 0) THEN 
    SELECT T_USER.REALNAME 
    FROM T_USER 
    WHERE T_USER.USERN = 'test';