Вызов хранимой процедуры

Спокойной ночи в моем часовом поясе.

Я использую Sybase ase 15, и у меня есть хранимая процедура с двумя входными параметрами, оба VARCHAR, в основном внутри хранимой процедуры я использую динамический SQL, что-то вроде этого:

@cmd = 'select * from TABLE where COL IN'+@PARAM1+'AND COL2=@PARAM2
EXEC(@cmd)

Я вызываю эту процедуру с помощью JDBC следующим образом:

CallableStatement stmt = conn.prepareCall("{call MyStoredProcedure(?,?)}");

stmt.setString(1, "'''0'',''1'''");
stmt.setString(2, '''fr''');
stmt.executeQuery();

Это выдает мне ошибку, сообщающую, что вызов искажен.

Но если я запускаю вызов непосредственно в среде IDE следующим образом:

EXEC  MyStoredProcedure'''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7''','''fr'''

Он работает без проблем, поэтому я предполагаю, что есть какая-то проблема с экранированием персонажа, я думаю.

Кто-нибудь сталкивался с этой проблемой?

С наилучшими пожеланиями

заранее спасибо


person tt0686    schedule 29.05.2013    source источник
comment
Хотя в первом параметре я просто использую целое число, на самом деле в базе данных они определены как VARCHAR, поэтому я передаю их с кавычками.   -  person tt0686    schedule 30.05.2013


Ответы (1)


Вы не указываете параметры IN и OUT:

http://docs.oracle.com/javase/tutorial/jdbc/basics/storedprocedures.html

Посмотрите, поможет ли следование руководству.

Я также хотел бы отметить, что у вас есть только два параметра, но ваш запрос передает строки, которые кажутся больше. Это уродливо, вводит в заблуждение и, кажется, нарушает первую нормальную форму.

person duffymo    schedule 29.05.2013