powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Имя таблицы представит переменной..
25 сообщений из 26, страница 1 из 2
Имя таблицы представит переменной..
    #35648790
Andreas_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята,есть вопрос.
В одном из событий идёт обращение к базе.Но нужно выбирать значения всегда из разных таблиц базы.
Как в запросе представить имя таблицы переменной..Кокакой синтаксис правильный
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35648845
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
- SetSqlSelect
- CreateFromSQL
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35648922
Andreas_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaR- SetSqlSelect
- CreateFromSQL
это решается вопрос через DW...
А нужно без него..Ну всё равно спасибо.Вопрос решён с использованием Курсора..)
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35649067
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andreas_84Ну всё равно спасибо.Вопрос решён с использованием Курсора..)
Какой ужОсъ!
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35649218
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EXECUTE - IMMEDIATE
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35649252
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RiskaEXECUTE - IMMEDIATE
Вы с упорством некоего животного все время пихаете EXECUTE - IMMEDIATE куда он не лезет. Это Dynamic SQL Format 1 SQL statement, а для того, что спрашивают нужно Dynamic SQL Format 4 SQL statement.
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35649288
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или хотя-бы Dynamic SQL Format 3 SQL statement...
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35649453
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sqlca.SyntaxFromSQL ( sqlselect, presentation, err )
затем применить этот синтакс создавая динамически datastore - делай с резалтсетом что хочешь
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35654793
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRsqlca.SyntaxFromSQL ( sqlselect, presentation, err )
затем применить этот синтакс создавая динамически datastore - делай с резалтсетом что хочешь
Есть нюанс один. Ваш запрос будет запускаться дважды. И если в sqlselect реально вызов процедуры с инсертами - тогда у вас появиться куча пустых записей :)
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35657603
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andy753SasaRsqlca.SyntaxFromSQL ( sqlselect, presentation, err )
затем применить этот синтакс создавая динамически datastore - делай с резалтсетом что хочешь
Есть нюанс один. Ваш запрос будет запускаться дважды. И если в sqlselect реально вызов процедуры с инсертами - тогда у вас появиться куча пустых записей :)

"В огороде бузина - а в киеве дядька"....

Каким макаром это связано с топиком и, уже интересно, каким макаром он будет запускаться дважды ?

Или то ньюанс - мол если таким макаром создать датастор на базе запроса с сохр.процедурой в которой есть инсерты, то эта процедура запустится и при создании датастора, а затем и при ретриве ?
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35657619
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRИли то ньюанс - мол если таким макаром создать датастор на базе запроса с сохр.процедурой в которой есть инсерты, то эта процедура запустится и при создании датастора, а затем и при ретриве ?
А Вы никогда не смотрели, что делает PB в случае создания SyntaxFromSQL? Он запускает запрос для определения ResultSet'a. Так что если например ResultSet зависит от переменных передаваемых в процедуру, то вообще работать не будет. И уменьшение скорости работы будет в 2 раза...
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35658868
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Так что если например ResultSet зависит от переменных передаваемых в процедуру, то вообще работать не будет.
ГЛУПОСТИ
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35659509
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппЛокшин Марк Так что если например ResultSet зависит от переменных передаваемых в процедуру, то вообще работать не будет.
ГЛУПОСТИ
Да неужели? Ну изобразите:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE dbo.usp_test @id int
as begin

  if @id =  1  begin
    select  1 ,'a'
  end else begin
    select  1 
  end
end
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35659537
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация, опять-таки, не новая.
Если автора устраивает решение с курсором, то флаг в руки, как говориться.
Вопрос из любопытства.
Список возможных имён таблиц известен, или произволен ?
Если он известен, то надо сделать RESULT SET , одинаковым для всех таблиц, даже, если в реале он не одинаковый, добавить в каждый селект константы-путышки нужных типов. Тогда данные можно будет тянуть при помощи UNION, параметры запуска, добавленные в where каждого селекта будут отсекать лишние селекты.
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35661239
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркФилиппЛокшин Марк Так что если например ResultSet зависит от переменных передаваемых в процедуру, то вообще работать не будет.
ГЛУПОСТИ
Да неужели? Ну изобразите:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE dbo.usp_test @id int
as begin

  if @id =  1  begin
    select  1 ,'a'
  end else begin
    select  1 
  end
end

Это у вас искусственным образом НЕ ResultSet зависит от переменных передаваемых в процедуру, а лист колонок ею возвращаемый (ResultSet это вообще то ряды), и это искусственное извращение в контексте вопроса никому не интересно.
В случае когда процедура может быть приспосабливаема для кажого клиента к примеру, чтоб иметь спец логику, то если интерфейс стабильный (то бишь набор аргументов не меняется), а лист колонок (ну то что в ряды суется) заранее не известен - SyntaxFromSQL и есть самое удобное решение. Один (первый) раз зовётся с тупыми аргументами, чтоб ResultSet был с нулём рядов, синтакс кешируется и вперёд...
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35661505
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну И то что в ряды суется
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35662363
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппЭто у вас искусственным образом НЕ ResultSet зависит от переменных передаваемых в процедуру, а лист колонок ею возвращаемый (ResultSet это вообще то ряды), и это искусственное извращение в контексте вопроса никому не интересно.

Бла, бла, бла. Это ResultSet. Это набор данных - дословный перевод (который собственно и отражает суть дела) - результирующие множество. Какие ряды? Вы о чем?
Согласен, пример который я привел - несколько искуственный, но модельный и отражает суть дела.
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35662811
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сохр.процедуры - запускаются :( Решается - как описал Филипп.
А запросы - кажися не запускаются. Во всяком случае как-то не так, без резалтсета.
Что если сделать .SyntaxFromSQL с "декартовым произведением" запросом ? Неужто при создании запустится и зависнет ? Вряд ли... Сколько раз делал - не замечал такого эффекта
К сожалению не могу проверить сейчас ...
Во всяком случае в паинтере, при создании датавиндов - не запускался, но быстро вытягивал заголовки и типы набора данных.
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35662882
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRСохр.процедуры - запускаются :( Решается - как описал Филипп.
А запросы - кажися не запускаются. Во всяком случае как-то не так, без резалтсета.
Что если сделать .SyntaxFromSQL с "декартовым произведением" запросом ? Неужто при создании запустится и зависнет ? Вряд ли... Сколько раз делал - не замечал такого эффекта
К сожалению не могу проверить сейчас ...
Во всяком случае в паинтере, при создании датавиндов - не запускался, но быстро вытягивал заголовки и типы набора данных.
Есть всякие хитрые опции типа
Код: plaintext
SET FMTONLY
и PowerBuilder ими пользуется для определения метаданных по запросу. С хранимой процедурой такой фокус не прокатывает. По крайней мере на некоторых серверах.
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35662932
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркЭто ResultSet. Это набор данных - дословный перевод (который собственно и отражает суть дела) - результирующие множество. Какие ряды? Вы о чем?
Согласен, пример который я привел - несколько искуственный, но модельный и отражает суть дела.
Это пример недоработки дизайна.
Тут есть как минимум две проблемы дизайна:
1) Набор столбцов результата - это часть интерфейса функции. Он не должен меняться.
2) Вызывающий код реализует часть вызываемой функции: дублируется код принятия решения о кол-ве стоблцов - один раз в вызывающем коде, второй раз в функции. Если изменить в одном из мест, не поменяв в другом, то этот код перестанет работать.

В том примере на самом деле нужны две функции (соответственно и два DW), а принятие решения о том какую из них вызвать должно происходить только в вызывающем коде .
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35663361
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЛокшин МаркЭто ResultSet. Это набор данных - дословный перевод (который собственно и отражает суть дела) - результирующие множество. Какие ряды? Вы о чем?
Согласен, пример который я привел - несколько искуственный, но модельный и отражает суть дела.
Это пример недоработки дизайна.
Тут есть как минимум две проблемы дизайна:
1) Набор столбцов результата - это часть интерфейса функции. Он не должен меняться.
2) Вызывающий код реализует часть вызываемой функции: дублируется код принятия решения о кол-ве стоблцов - один раз в вызывающем коде, второй раз в функции. Если изменить в одном из мест, не поменяв в другом, то этот код перестанет работать.

В том примере на самом деле нужны две функции (соответственно и два DW), а принятие решения о том какую из них вызвать должно происходить только в вызывающем коде .
Я этот пример написал, чтобы просто было явно видно что могут быть проблемы. А проблемы быть могут - я не помню, с какими параметрами там билдер вызывает эти процедуры, то-ли null то-ли 0, но если при этом параметре процедура ничего не возвращает (допустим считается корректным только больше 0 параметр, а с другими она выдает ошибку что мол недопустимый параметр). И всё...
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35663549
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркЯ этот пример написал, чтобы просто было явно видно что могут быть проблемы
С этим я не спорю. Проблемы всегда можно себе устроить :)
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35664295
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЛокшин МаркЭто ResultSet. Это набор данных - дословный перевод (который собственно и отражает суть дела) - результирующие множество. Какие ряды? Вы о чем?
Согласен, пример который я привел - несколько искуственный, но модельный и отражает суть дела.
Это пример недоработки дизайна.
Тут есть как минимум две проблемы дизайна:
1) Набор столбцов результата - это часть интерфейса функции. Он не должен меняться.
2) Вызывающий код реализует часть вызываемой функции: дублируется код принятия решения о кол-ве стоблцов - один раз в вызывающем коде, второй раз в функции. Если изменить в одном из мест, не поменяв в другом, то этот код перестанет работать.

В том примере на самом деле нужны две функции (соответственно и два DW), а принятие решения о том какую из них вызвать должно происходить только в вызывающем коде .

Вот у меня как раз реализация, работающая у десятков клиентов, где набор СТОЛБЦОВ неизвестен заранее , а вот function signature хранимой процедуры не меняется (если арргументы бессмысленны, то просто НОЛЬ рядов возвращается, а даже если >0, то для служебного вызова сделанного для каширования синтаксиса из которого строится dataobject, это значения не имеет). С помощью SyntaxFromSQL всё это очень эелегантно работает.
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35665344
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппВот у меня как раз реализация, работающая у десятков клиентов, где набор СТОЛБЦОВ неизвестен заранее
Набор столбцов результата зависит от аргументов?
...
Рейтинг: 0 / 0
Имя таблицы представит переменной..
    #35666032
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyФилиппВот у меня как раз реализация, работающая у десятков клиентов, где набор СТОЛБЦОВ неизвестен заранее
Набор столбцов результата зависит от аргументов?
Нет, зависит от того, что клиент написал в его версии хранимой процедуры, или от того как мы её поменяли с новым релизом.
А его зависимость от значения аргументов есть искусственная глупость, которую обсуждать не стоит, мы же это уже выше решили :-)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Имя таблицы представит переменной..
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]