ID: 33564
User updated by: daniel at bitarts dot com
Reported By: daniel at bitarts dot com
-Status: Bogus
+Status: Open
Bug Type: OCI8 related
Operating System: solaris
PHP Version: 5.0.4
New Comment:
I had made a mistake, TRANSLATE only works for NVARCHAR's etc and
anything less than 2000 characaters.
What I should be using is TO_NCHAR. This works fine in sql:
UPDATE TEST
SET NCLOB_BACKUP = TO_NCLOB(:NCLOB_BACKUP)
WHERE ID='4
However, running this through php causes php to lock up:
$data = "TEst2";
$lob = OCINewDescriptor($conn, OCI_D_LOB);
$stmt = OCIParse($conn,"UPDATE TEST
SET NCLOB_BACKUP =
TO_NCLOB(:NCLOB_BACKUP)
WHERE ID='4'");
OCIBindByName($stmt, ':NCLOB_BACKUP', &$lob, -1, OCI_B_CLOB);
$lob->WriteTemporary($data);
OCIExecute($stmt, OCI_DEFAULT);
$lob->close();
$lob->free();
OCICommit($conn);
I'm not too sure if it is an oracle bug anymore, or if it is, php
should respond to it better?
Thanks
Previous Comments:
------------------------------------------------------------------------
[2005-07-05 11:35:20] [EMAIL PROTECTED]
Or some kind of your mistake, I'm not sure how to classify it.
So it doesn't look like PHP-only problem and I'm closing this report as
bogus. Feel free to reopen it if/when you have more info.
------------------------------------------------------------------------
[2005-07-05 11:23:34] daniel at bitarts dot com
Same things happens there too, when I add lots of characters. Seems to
be a bug in oracle?
------------------------------------------------------------------------
[2005-07-04 22:24:47] [EMAIL PROTECTED]
And what if you try to do the same with SQLPlus?
Do the same query work for you?
------------------------------------------------------------------------
[2005-07-04 16:20:41] daniel at bitarts dot com
I am using Oracle 9i
------------------------------------------------------------------------
[2005-07-04 16:18:57] daniel at bitarts dot com
Description:
------------
Trying to insert data into an NCLOB field. I can do this by using a
TRANSLATE in my sql, and binding variable with the OCIBindByName
functions. However, when I pass a certain amount of characters, the
update fails with this (incorrect) error:
Warning: ociexecute() [function.ociexecute]: OCIStmtExecute: ORA-12703:
this character set conversion is not supported
That amount of characters seems to be 2000. In the code below, if you
change this line
$data = str_pad($data, 2001, "a");
to
$data = str_pad($data, 2000, "a");
It works fine. It's only when you try to insert more than 2000
characters you get this odd behaviour.
Thank you.
Daniel
Reproduce code:
---------------
$data = str_pad($data, 2001, "a");
$lob = OCINewDescriptor($conn, OCI_D_LOB);
$stmt = OCIParse($conn,"UPDATE TEST
SET NCLOB_TEST = TRANSLATE(:NCLOB_TEST USING
NCHAR_CS)
WHERE ID='1'");
OCIBindByName($stmt, ':NCLOB_TEST', &$lob, -1, OCI_B_CLOB);
$lob->WriteTemporary($data);
OCIExecute($stmt, OCI_DEFAULT);
$lob->close();
$lob->free();
OCICommit($conn);
Expected result:
----------------
The NCLOB data field fills with 2001 "a" characters
Actual result:
--------------
error message:
Warning: ociexecute() [function.ociexecute]: OCIStmtExecute: ORA-12703:
this character set conversion is not supported
Nothing added to database.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=33564&edit=1