wolfphw 60 Denunciar post Postado Junho 9, 2015 E ae povo, já estou faz 4 dias batendo cabeça, testando tudo oke tem na net mas nada.. Estou com um problema, to fazendo um BLOG em PHP com banco ORACLE, estou utilizando o oracle 11g, o campo CLOB cabe 4.000 caracteres, dai acima disso tem que transformar pra binario, e ai está o problema, estou tentando de tudo para pode fazer isso, estou utilizando o PDO. fiz procedures tb e nada.. se alguem puder me ajudar agradeço.... Segue minha estrutura de teste no banco tabela TESTE ID (number) TEXTO (clob) 1 texto exemplo 01 2 texto exemplo 02 3 texto exemplo 03 PROCEDURE CREATE OR REPLACE PROCEDURE TESTE_UPDATE ( ID_ENTRADA IN NUMBER , TEXTO_ENTRADA IN CLOB ) AS BEGIN UPDATE TESTE SET TEXTO=TEXTO_ENTRADA WHERE ID=ID_ENTRADA; END TESTE_UPDATE; PHP CHAMANDO A PROCEDURE pra UPDATE no campo <?php require("conexao.php"); $id = 1; $texto = "123456789 "; for ($i=0; $i<=100; $i++) { $texto .= "123456789 "; } $stmt = $pdo->prepare("CALL TESTE_UPDATE(?,?)"); $stmt->bindParam(1, $id, PDO::PARAM_INT); $stmt->bindParam(2, $texto, PDO::PARAM_LOB); $pdo->beginTransaction(); $stmt->execute(); $pdo->commit(); ?> Dessa forma ele não vai tb, agora se eu retirar o PDO::PARAM_LOB ele altera o campo, desde que a quantidade de caracteres não seja superior a 4.000, esse PDO::PARAM_LOB seria para converter para o formato do campo CLOB do oracle... PHP inserindo no banco <?php require("conexao.php"); $id = 10; $texto = "123456789 "; for ($i=0; $i<=100; $i++) { $texto .= "123456789 "; } $stmt = $pdo->prepare("insert into TESTE (ID, TEXTO) values (?,?)"); $stmt->bindParam(1, $id, PDO::PARAM_INT); $stmt->bindParam(2, $texto, PDO::PARAM_LOB); $pdo->beginTransaction(); $stmt->execute(); $pdo->commit(); ?> Mesma coisa se eu tirar o PDO::PARAM_LOB ele tb insere desde que não ultrapasse os 4.000 caracteres. Esse FOR vai servir para criar a string com uma quantidade grande, nos exemplos esta 100x, então vai ser uma string com um pouco mais de 1.000 caracteres, se mudar o valor pra <= 1000 ele já vai passar de 10.000 caracteres e já não altera e nem insere no banco, mesmo com o PDO::PARAM_LOB ou sem ele. Alguém já passou por isso??? Ou teria uma outra dica de como colocar um conteúdo em um campo do ORACLE com mais de 20.000 caracteres???? Desde já agradeço Compartilhar este post Link para o post Compartilhar em outros sites
wolfphw 60 Denunciar post Postado Junho 10, 2015 Consegui resolver, utilizando a procedure mesmo, mas com uma alteração da que estava escrevendo e utilizando outro método para executar a procedure TABELA EXEMPLO TB_TESTE ID (number) TEXTO (clob) 1 Texto exemplo 01 2 Texto exemplo 02 PROCEDURE CREATE OR REPLACE PROCEDURE TESTE_UPDATE ( ID_ENTRADA IN NUMBER , TEXTO_ENTRADA IN CLOB ) AS BEGIN UPDATE TB_TESTE SET TEXTO=TEXTO_ENTRADA WHERE ID=ID_ENTRADA; END TESTE_UPDATE; EXECUTANDO A PROCEDURE VIA PHP <?php require("conexao.php"); $string = ""; for ($i=1;$i<=3200;$i++) { $string .= "123456789-"; } $sql = "BEGIN TESTE_UPDATE('1','$string'); END;"; $pdo->query($sql); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Latorre 2 Denunciar post Postado Julho 19, 2017 Desculpa ressuscitar esse tópico, mas nao entendi sua resolução. Estou com quase o mesmo caso, mas no meu é acessar o campo de long obj. Quando tento acessar via PDO segue esse erro: data was too large for buffer and was truncated to fit it in. Sabe como posso resolver para ler esses dados? O Campo é do tipo LONG no banco de dados ORACLE. Compartilhar este post Link para o post Compartilhar em outros sites