Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вернуть результат функции Oracle / 9 сообщений из 9, страница 1 из 1
14.03.2008, 12:49
    #35190687
еще вопрос
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
еще вопросПодскажите как получить результат функции из vb скрипта?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create or replace function functest(p_var IN VARCHAR2) return number is
  idnum NUMBER;
begin
  idnum :=  0 ;
  if p_var = 'ALL' then
    idnum := idnum +  1 ;
  end if;   
  return(idnum);
end functest;

делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Set cmdStoredProc = CreateObject("ADODB.Command")
Set cmdStoredProc.ActiveConnection = ADOConnection
cmdStoredProc.CommandText = "functest(?)"
cmdStoredProc.CommandType =  4 

Set param6 = cmdStoredProc.CreateParameter("p_var", adVarChar, adParamInput ,  10 , "ALL")
cmdStoredProc.Parameters.Append param6

Set param7 = cmdStoredProc.CreateParameter("Prm", adInteger, adParamOutput,  10 ,  1 )
cmdStoredProc.Parameters.Append param7

Set rs = cmdStoredProc.Execute
i = rs.Fields( 0 ).Value
msgbox i
ошибка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
---------------------------
Сервер сценариев Windows
---------------------------
Сценарий:	D:\test.vbs
Строка:	 47 
Символ:	 1 
Ошибка:	Отсутствует значение для одного или нескольких требуемых параметров.
Код:	80040E10
Источник: 	Provider

---------------------------
ОК   
---------------------------

Может у кого есть рабочий пример? Хотя бы не на васике ...
...
Рейтинг: 0 / 0
14.03.2008, 13:01
    #35190740
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
Код: plaintext
1.
2.
3.
4.
5.
6.
cmdStoredProc.Parameters.Append  cmdStoredProc.CreateParameter("RET", adInteger, adParamReturnValue)
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter("p_var", adVarChar, adParamInput ,  10 , "ALL")

cmdStoredProc.Execute

Dim N as double
N = cmdStoredProc.Parameters("RET").Value
...
Рейтинг: 0 / 0
14.03.2008, 13:05
    #35190758
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
если это в VBS, то не забываем заменять adVarChar, adParamInput, ... на их числовые значения или объявлять соответствующие переменные.

а также указывать схему, где лежит соответствующая функция: MYPACKAGE .functest
...
Рейтинг: 0 / 0
14.03.2008, 13:24
    #35190828
еще вопрос
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
Konst_One
Код: plaintext
1.
2.
3.
4.
5.
6.
cmdStoredProc.Parameters.Append  cmdStoredProc.CreateParameter("RET", adInteger, adParamReturnValue)
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter("p_var", adVarChar, adParamInput ,  10 , "ALL")

cmdStoredProc.Execute

Dim N as double
N = cmdStoredProc.Parameters("RET").Value

та же самая ошибка ...
...
Рейтинг: 0 / 0
14.03.2008, 13:36
    #35190867
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
Правильный провайдер обязательно. Функция должна быть в паблик-пакете, который доступен текущему пользователю оракловой базы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim cn
Dim cmd
Dim ret


Set cn=CreateObject("ADODB.Connection")
cn.Open "Provider=MSDAORA;..."


Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = cn
cmd.CommandText = "functest"
cmd.CommandType =  4 

cmd.Parameters.Append cmd.CreateParameter("RET",  3 ,  4 )
cmd.Parameters.Append cmd.CreateParameter("p_var",  200 ,  1 ,  10 , "ALL")

cmd.Execute

ret = cmd.Parameters("RET").Value
...
Рейтинг: 0 / 0
14.03.2008, 14:06
    #35190971
еще вопрос
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
connect ZAR/ZAR @нормальный;

CREATE OR REPLACE PACKAGE TESTP
AS
   FUNCTION testfunc(p_var IN VARCHAR2) return number;

   PRAGMA RESTRICT_REFERENCES (testfunc, WNDS);
 
END TESTP;

CREATE OR REPLACE PACKAGE BODY TESTP
IS
function testfunc(p_var IN VARCHAR2) return number is
  idnum NUMBER;
begin
  idnum :=  0 ;
  if p_var = 'ALL' then
    idnum := idnum +  1 ;
  end if;   
  return(idnum);
end;
END TESTP;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
set ADOConnection = CreateObject("ADODB.Connection")
ConnectionString = "Provider=MSDAORA.1;" + _
	"Data Source=нормальный;" + _
	"User ID=ZAR;" + _
	"Password=ZAR;" + _
	"Persist Security Info=False;"
ADOConnection.ConnectionString = ConnectionString
ADOConnection.Open

Set cmdStoredProc = CreateObject("ADODB.Command")
Set cmdStoredProc.ActiveConnection = ADOConnection
cmdStoredProc.CommandText = "ZAR.TESTP.testfunc(?)"
cmdStoredProc.CommandType =  4 

cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter("p_var",  200 ,  1  ,  8 , "ALL")
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter("RET",  3 ,  4 )

cmdStoredProc.Execute
N = cmdStoredProc.Parameters("RET").Value
msgbox N
Код: plaintext
Отсутствует значение для одного или нескольких требуемых параметров.

а вот если написать без "(?)"
cmdStoredProc.CommandText = "ZAR.TESTP.testfunc"
то уже:
Код: plaintext
1.
Ошибка:	ORA- 06550 : line  1 , column  7 :
PLS- 00306 : wrong number or types of arguments in call to 'testfunc'

HELP! :)
...
Рейтинг: 0 / 0
14.03.2008, 14:41
    #35191116
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
вы по прежнему пытаетесь сочинять свой код, не учитывая то, что я уже вам дал:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
...

cmdStoredProc.CommandText = "ZAR.TESTP.testfunc"
cmdStoredProc.CommandType =  4 

cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter("RET",  3 ,  4 )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter("p_var",  200 ,  1  ,  8 , "ALL")

...

последовательность параметров должна быть именно такой !!!
...
Рейтинг: 0 / 0
14.03.2008, 14:46
    #35191135
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
для RET попробуйте тип возвращаемого параметра 131
...
Рейтинг: 0 / 0
14.03.2008, 16:11
    #35191542
еще вопрос
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть результат функции Oracle
Konst_Oneпоследовательность параметров должна быть именно такой !!!
Спасибо! все заработало :)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вернуть результат функции Oracle / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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