Ошибка ORA-01460

Etwas

Новичок
Ошибка ORA-01460

Кто-нибудь сталкивался с такой ошибкой?

ociexecute() [function.ociexecute]: OCIStmtExecute: ORA-01460: запрошено бессмысленное или недопустимое преобразование данных

Ошибка вылетает, когда запускаю функцию, при чем в PL/SQL тестируется нормально, запись сохраняется, а вот через скрипт - ошибка.

PHP:
$result = $this->db->parse("
	declare 
	v_time date;
	v_birth date;
	begin
		v_time:=to_date(:v_ts,'RRRR-MM-DD HH24:MI:SS');
		v_birth:=to_date(:v_birthdate,'DD.MM.YYYY');
		:return:=schema.packet.function_save(											v_name_1=>:v_name_1,											v_name_2=>:v_name_2,											v_name_3=>:v_name_3,							
			v_birthdate=>v_birth,											v_ts=>v_time												);
	:v_ts := to_char(v_time,'YYYY-MM-DD HH24:MI:SS');
	end;
");
v_ts=2007-04-18 16:35:43

бинды проходят без ошибок, а вот на стадии execute - вешается.
 

Etwas

Новичок
Автор оригинала: tony2001
RRRR-MM-DD HH24:MI:SS - выделенная часть точно верна?
Да. До этого пробовал YYYY-MM-DD. Ошибка та же... пробовал поставить v_time:= sysdate; Не помогло.
 

tony2001

TeaM PHPClub
уменьшай SQL постепенно, убирай переменные и смотри что конкретно ему не нравится.
oci_error() какой-либо осмысленный указатель на место в SQL возвращает? (см. offset & sqltext )
 

Etwas

Новичок
Автор оригинала: tony2001
уменьшай SQL постепенно, убирай переменные и смотри что конкретно ему не нравится.
oci_error() какой-либо осмысленный указатель на место в SQL возвращает? (см. offset & sqltext )
SQL уменьшить боюсь не получится :(

Код:
 => 1460
[message] => ORA-01460: запрошено бессмысленное или недопустимое преобразование данных
[offset] => 0
[sqltext] вывел тоже, что и было в parse
 

tony2001

TeaM PHPClub
>SQL уменьшить боюсь не получится
легко.
сначала убрать все переменные и назначать их сразу в запросе, потом вместо процедуры взять её тело и его уже уменьшать.

>[offset] => 0
ага. "догадайтесь сами" это называется.
 

asaka

Новичок
эх...
для начала запиши все в одну переменную, в одну строку или склей строки:
PHP:
$sql = "declare ";
$sql.= "v_time date; ";
$sql.= "v_birth date; ";
$sql.= "begin ";
$sql.= "v_time:=to_date(:v_ts,'RRRR-MM-DD HH24:MI:SS'); ";
$sql.= "v_birth:=to_date(:v_birthdate,'DD.MM.YYYY'); ";
$sql.= ":return:=schema.packet.function_save(:v_name_1, :v_name_2, :v_name_3, v_birth, v_time); ";
$sql.= ":v_ts := to_char(v_time,'YYYY-MM-DD HH24:MI:SS'); ";
$sql.= "end;  ";
$result = $this->db->parse($sql);
затем проверь вводимые данные.
tony2001 верно говорит что надо уменьшить SQL. Закоменитируй хотяб вызов функции и прогони все в Плюсе
PHP:
declare
v_time date;
v_birth date;
v_ts varchar2(255) := '2007-05-14 12:00:01';
v_birthdate varchar2(255) := '15.05.2007';
begin
v_time:=to_date(v_ts,'RRRR-MM-DD HH24:MI:SS');
v_birth:=to_date(v_birthdate,'DD.MM.YYYY');
--:return:=schema.packet.function_save(:v_name_1, :v_name_2, :v_name_3, v_birth, v_time); ";
v_ts := to_char(v_time,'YYYY-MM-DD HH24:MI:SS');
end;
 

asmm

Новичок
Такой вопрос - каким образом ты привязываешь параметры?
Если они хранятся в массиве, по которому ты проходишь конструкцией foreach, то для всех параметров будет установленна ссылка на переменную в памяти, которая хранит значение последнего из них.
 
Сверху