1
votes

My table has this structure T_user(usern,pass,realname: varchar(50); I am a beginner in Firebird and I want to execute the following statements, but I get this error:

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';

This is the error message:

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

I'm using Firebird 2.5 and FlameRobin.

2
You can't use IF in a query, only in PSQL (a procedure or EXECUTE BLOCK). - Mark Rotteveel

2 Answers

3
votes

Try this code:

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
votes
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';