Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Передача даты во входной параметр хранимой процедуры

Всем доброго дня,
Не пойму что я делаю не так.
Создал таблицу:
SQL
1
2
3
4
5
CREATE TABLE TestTable(
    [MachId] VARCHAR(10) NOT NULL,
    [ValId] INT NOT NULL, 
    [TimeD] DATETIME NOT NULL,
   )
Создал хранимую процедуру на внесение значений:
SQL
1
2
3
4
5
6
7
8
9
10
11
PROCEDURE [dbo].[TestProc] 
    (
    @MachId VARCHAR(10),
    @ValId INT,
    @TimeD DATETIME
    )
AS
BEGIN   
    INSERT INTO TestTable(MachId, ValId, TimeD)
        VALUES (@MachId, @ValId, @TimeD)
END
При попытке вызвать эту процедуру выдает ошибку:
SQL
1
EXEC TestProc "fg",123,getdate
SQL
1
2
сообщение: 8114, уровень: 16, состояние: 5, процедура: TestProc, строка: 0 [строка начала пакета: 0]
Ошибка при преобразовании типа данных nvarchar к datetime.
Что я делаю неправильно?
Ответ:
Сообщение от Whitelion
Invm - Спасибо.
Решил:
SQL
1
2
3
DECLARE @T DATETIME
SET @T = GETDATE()
EXEC TestProc "SD", 12, @T
Добавлено через 2 минуты

Тогда ошибка
SQL
1
Неправильный синтаксис около конструкции ")"
Что, по-вашему, означают двойные кавычки?
А может, у вас сервер не MSSQL?
Вопрос: Параметры хранимых процедур

При написании хранимой процедуры столкнулся с такой проблемой: нужно параметром хранимой процедуры передвать название таблицы, создаваемой этой процедурой, но по факту получается что таблица создается с названием переменной которой названа таблица в запросе CREATE, может кто-то подскажет как получить желаемый результат? Вот SQL запрос на создание храимой процедуры:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE PROCEDURE `createWorkList` (IN tn varchar(10)) 
  LANGUAGE SQL DETERMINISTIC 
  SQL SECURITY DEFINER 
  COMMENT 'procedure for create table worklist' 
  BEGIN 
    DECLARE tblName varchar(10);
        SET tblName = tn;
        CREATE TABLE IF NOT EXISTS tblName 
        (   
            `id` INT NOT NULL AUTO_INCREMENT,
        `date&workTime` varchar(1500) NOT NULL,
        `date&priemTime&LName` varchar(3000),
        `personal_id` INT NOT NULL,
    
        PRIMARY KEY(`id`),
        INDEX (`personal_id`),
        
        FOREIGN KEY (`personal_id`) 
        REFERENCES `personal`(`id`)
        ON UPDATE CASCADE 
            ON DELETE RESTRICT
        )ENGINE=InnoDB DEFAULT CHARSET=utf8;
  END 
Ответ: используйте подготовленные выражения
Вопрос: В параметре хранимой процедуры передать строку запроса

Здравствуйте. Подскажите можно в параметре хранимой процедуры передать строку запроса:
call my_procedure(column='vasia');
Ответ: MySql
Вопрос: Чайниковские вопросы по хранимым процедурам

Коллеги, есть несколько глупых вопросов по хранимым процедурам, помогите!
1. Существует ли способ узнать параметры возвращаемого хранимой процедурой набора данных без запуска хранимой процедуры? Т.е. наименование, тип и порядок возвращаемых столбцов.
1а. Для параметров хранимой процедуры, как я понимаю, такой способ заведомо есть. Они должны, наверное, быть где то в sys.objects. Или я ошибаюсь?
2. Существует ли способ сохранить возвращаемые процедурой данные в xml? Не переписать хранимку, а переформатировать у готовой процедуры result set в xml и уже его присвоить переменной или сохранить в таблицу.
По exec ... RESULT SETS (as for xml) не могу найти примера категорически. И сам не могу победить. И вообще, оно вроде не для этого?
Пока не смог ничего другого придумать, как сделать запускач-обертку.
Хранимую процедуру, которая принимает параметр имя sp, набор входных параметров в виде имя - значение в xml, и описание выходных в виде название - тип, тоже в хмл.
А внутри создаю с помощью динамического sql временную таблицу, рисую опять же динамически insert ... Exec в эту временную таблицу, а потом делаю из нее select * from... for xml raw

Но куча ограничений, и куча ручной работы.
И вообще, мне кажется я перемудрил.

Помогите, а?
Ответ:
uaggster
Идея была радикально ускорить вывод этих данних следующим образом:
1. Создаем на сервере некую очередь из этих хранимых процедур. Возможно, просто таблицу название - параметры.
2. Создаем job, который будет запускать процедуры из этого пула по очереди, и пишет их вывод в таблицу процедура - дата - параметры - результат (параметры - результат - в хмл, конечно).
Для решения таких задач придумали Service Broker.
uaggster
2. Существует ли способ сохранить возвращаемые процедурой данные в xml? Не переписать хранимку, а переформатировать у готовой процедуры result set в xml и уже его присвоить переменной или сохранить в таблицу.
Отдаю на растерзание -
Вопрос: Передача даты как параметра в хранимую процедуру

Здравствуйте, подскажите как вылечить.

В хранимой процедуре входящий параметр PDate1 типа Date.

используется так
...
WHERE Date1=:PDate1

Из FIBDataset вызываю процедуру:

SelectSQL.Add('SELECT * FROM StoredProcName(:PDate1, ...)');
Prepare;
Params.ParamByName('PDate1').AsDate:=MyDate; // MyDate любой пробовал и NOW и как строку '30.12.2015' по всякому

Попадая в запрос MyDate становится похожа на '30-DEC-2015'
Вываливается ошибка:
Incompatible column/host variable data type.
Ответ: перебирать варианты подряд - это комбинаторный взрыв.

тебе нужно адресно проверить два наиболее вероятных места

Arioch
Цель все та же, понять выставляется ли DataType у параметра.
Если да - то как это учитывается при переводе значения в формат FB
Если нет - то почему не выставляется


После чего станет яснее что и как выправлять

Use the source, Luke!
Вопрос: Cognos 10.2.1 FP6 Неправильный формат даты передаваемый в хранимую процедуру

Всех приветствую! Давно не заходил =)

Ситуация следующая: Развернул еще один сервер Cognos BI, ОС та же самая (с виду, проверил все региональные настройки, языки и т.п идентично), Cognos тот же, подключаюсь к тем же (существующим) оракловым БД.
Перенес пакеты с отчетами, и настройками подключений. Вроде бы все ок. Но столкнулся с проблемой при работе с хранимыми процедурами. Проекты взяты с копируемого сервера Cognos, запросы были созданы ранее, , так вот хранимая процедура ожидает формат даты DD-MON-YY, а из RS датапикер передает формат DD.MM.YY
На копируемом сервере из RS датапикер передает формат даты DD-MON-YY (как надо)

Все перерыл, не могу найти, где должен быть указан формат передаваемый из отчета в хранимую процедуру. Не менять же хранимую процедуру, странно как-то.
Настройки конфигураторов идентичны, глобальные настройки идентичны.
В FM на серверах настройки по умолчанию, одинаковые.

Вопросов несколько, куда копать? И должно ли так зависеть от формата даты, ну дата и дата, мало ли как настроено?
Спасибо.
Ответ: mishanya3624,

Насчет ОС не могу 100% быть уверенным.
Инсталляторы для Cognos точно одинаковые. Oracle_client версия 11.2 с сайта Oracle взят.
Вопрос: Добавление параметров в хранимую процедуру VS C#

Я ввожу значение в текстбокс и это значение пытаюсь добавить в параметры хранимой процедуры что бы выполнить запрос.
Проблема в том, что когда я пытаюсь добавить больше одного параметра то у меня перестают выводится значения. Как нужно добавить параметры что бы выводились значения?
Когда раскоментировал 2 парметра

Когда только один параметр

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private static void AddUser(string surname, string name, string middlename, string Diagnos, DateTime dateofbirth)
        {
adapter = new SqlDataAdapter("sp_Select4", connection);
            adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            //adapter.SelectCommand.Parameters.AddWithValue("@Фамилия", tbox1.Text);
//ПАРАМЕТРЫ РАБОТАЮТ ТОЛЬКО ПО ОТДЕЛЬНОСТИ 
 
            adapter.SelectCommand.Parameters.Add("@Фамилия", SqlDbType.NVarChar, 50);
            adapter.SelectCommand.Parameters["@Фамилия"].Value = tbox1.Text;
 
            //adapter.SelectCommand.Parameters.Add("@Имя", SqlDbType.NVarChar, 50);
            //adapter.SelectCommand.Parameters["@Имя"].Value = tbox2.Text;
 
            //adapter.SelectCommand.Parameters.Add("@Отчество", SqlDbType.NVarChar, 50);
            //adapter.SelectCommand.Parameters["@Отчество"].Value = tbox3.Text;
 
            //adapter.SelectCommand.Parameters.Add("@Диагноз", SqlDbType.NVarChar, 50);
            //adapter.SelectCommand.Parameters["@Диагноз"].Value =  tbox4.Text;
}
private void toolStripButton14_Click(object sender, EventArgs e)//Кнопка найти 
        {
            AddUser(surname, name, middlename, Diagnos, dateofbirth);
 
            adapter.Fill(SelectRequest2);
            commandBuilder = new SqlCommandBuilder(adapter);
            bindingSource7.DataSource = SelectRequest2;
            bindingNavigator7.BindingSource = bindingSource7;
            dataGridView7.DataSource = bindingSource7;
            
        }
Ответ: или на клиенте сделать
SQL
1
2
IF TRIM(tbox2.Text) <> '' THEN
  adapter.SelectCommand.Parameters["@Имя"].Value = TRIM(tbox2.Text);
или в процедуре
SQL
1
IF @Имя IS NOT NULL AND @Имя <> ''
Добавлено через 36 секунд
ибо '' и NULL не одно и то же
Вопрос: Получение значения выходного параметра хранимой процедуры

Существует хранимая процедура, которая возвращает 2 значения

SET TERM ^ ;
CREATE PROCEDURE PU$EMAIL_EXISTS (
    EMAIL VARCHAR(60) )
RETURNS (
    [color=black]RESULT[/color] VARCHAR(60),
   [color=black] CODE_RESULT[/color] SMALLINT )
AS
---------------
END
END^
SET TERM ; ^


Необходимо из сторонней (еще одной процедуры) вызвать PU$EMAIL_EXISTS
и проверить значение именно возвращаемого параметра "CODE_RESULT"

Как это сделать?

База данных Firebird 2.5
Ответ: kdv, спасибо.
Вопрос: хранимая процедура с выходным параметром

помогите пожалуйста
нужна любая хранимая процедура с выходным параметром и как вызвать. Для примера
Ответ:
SQL
1
2
3
4
5
6
7
ALTER PROCEDURE [dbo].[SeDocument_GetOrderCode] @Document INT, @Code INT OUTPUT
AS BEGIN
  ...
  
  SELECT @Code = 
 
END
написать запрос
SQL
1
EXECUTE  SeDocument_GetOrderCode :Document , :Code OUT
перед выполнением присвоить значение входного параметра, после выполнения считать значение выходного
Вопрос: Можно ли использовать результат функции для передачи в переменную хранимой процедуры?

Добрый день.

Есть функция, у которой возвращаемый результат INT:
  [dbo].[test_function]()


Почему-то не получается её использовать напрямую (без объявления переменной) передавая в параметр хранимой процедуры:

  EXECUTE [test_proc] @TestParam = [dbo].[test_function]()


Существуют ограничения?
Ответ: Спасибо!
Извиняюсь за свою невнимательность!