Конференция "Базы" » Запрос к системной таблице Firebird.
 
  • Drowsy © (17.07.18 16:43) [0]
    В инете нашёл такой запрос
    select  user,  current_role  from rdb$database


    Он честно исполняется. У меня вопрос - откуда берутся значения user  и current_role, если в таблице rdb$database таких полей нет.?
  • icp © (17.07.18 17:12) [1]
    а с чего ты решил, что в списке селекта все должно быть полями?

    select sysdate from dual

    ни самой таблицы дуал, ни тем более поля сисдата в природе нет, а запрос выполняется и возвращает результат
  • icp © (17.07.18 17:23) [2]
    https://firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref-appx04-database.html

    RDB$DATABASE stores basic information about the database. It contains only one record.

    таким образом здесь "from rdb$database" написано всего лишь по двум причинам:

    1. Это не mssql и в селекте обязан быть фром (а если есть фром, то и объект для фрома должен быть)

    2. Выбрана таблица rdb$database потому что в ней всегда и везде ровно одна запись, и значит значения функций user и current_role будут возвращены как поля всего одной строки

    можешь с таким же успехом сделать  

    select  'мама мыла раму' as dummy,  
             2*2 as four,
             user,  
             current_role  
    from любая_другая таблица

    и получить много одинаковых значений юзернеймов и ролей
  • Styx © (18.07.18 09:38) [3]

    > можешь с таким же успехом сделать  

    Ну это врядли... Неужели в пользовательской таблице нельзя поле назвать User?
  • sniknik © (18.07.18 09:54) [4]
    > Неужели в пользовательской таблице нельзя поле назвать User?
    можно, но тогда нужно в запросе выделять что обращение именно к полю (в mssql например кавычками []), а переменная это переменная.
 
Конференция "Базы" » Запрос к системной таблице Firebird.
Есть новые Нет новых   [134427   +26][b:0][p:0]