Pergunta

Ok, isso é um tanto obscuro, mas espero que alguém possa me ajudar com isso.

O sistema que eu estou trabalhando cria uma dinâmica de seqüência de caracteres SQL para execução dentro de um procedimento armazenado, e parte do que SQL dinâmica a definição de aliases de coluna, que são, na verdade, valores obtidos a partir de outra tabela de usuário geradas dados.

Assim, por exemplo, a seqüência de caracteres pode ser algo como;

SELECT table1.Col1 AS "This is an alias" FROM table1

Isso funciona bem.No entanto, o valor que é utilizado para o alias pode potencialmente conter um duplo carácter de aspas, o que quebra o exterior cotações.Eu pensei que talvez pudesse escapar aspas duplas dentro do alias de alguma forma, mas eu não tive nenhuma sorte de descobrir como fazer isso.Barra invertida não funciona, e usando aspas duplas em uma linha resulta no erro;

SQL Error: ORA-03001: unimplemented feature
03001. 00000 -  "unimplemented feature"
*Cause:    This feature is not implemented.

Alguém já teve alguma experiência com esse problema antes?Felicidades para qualquer insight que qualquer pessoa tem.

p.s.as aspas são necessárias em torno de aliases, porque eles podem conter espaços.

Foi útil?

Solução

Você pode simplesmente colocar outro personagem, em vez de aspas duplas e substituir com aspas no código?

Algo como isto:

SELECT table1.Col1 AS "This is |not| an alias" FROM table1

Em seguida, basta substituir | com ".

Eu sei que é um hack, mas eu não consigo pensar em nenhuma solução melhor...E o que você está fazendo não é um hack de qualquer maneira.O "bom" caminho seria a de selecionar os valores e os nomes de coluna em separado e associá-las em seu código.Isso tornaria as coisas muito mais limpa.

Outras dicas

usar o Oracle citação do operador:

select q'#someone's quote#' from dual;

o '#' pode ser substituído por qualquer personagem

Quando eu executar esse:

select 'test"columnname"' from dual

Oracle retorna este (observe a Oracle gerado nome da coluna):

'TESTCOLUMNNAME'
--------------------------------
test"columnname

O fato de que a Oracle é o nome da coluna não inclui a minha proposta de duplo diz-me que a Oracle não pode, provavelmente, representam isso.

Melhor aposta tanto quanto eu posso ver é a faixa de aspas duplas, a partir de seus dados antes de utilizar nomes de coluna.Infelizmente, isso também vai exigir que você faça o mesmo filtragem quando você selecione essas colunas, mas não vejo outra maneira.

um possivelmente fecunda área de investigação seria a de olhar para o método de cotação.

meu $quotedString = $dbh->quote( $string );

Tente isso, duas aspas simples fato de olhar como uma aspa dupla na saída:
select 1 as "University ''John Smith''" from dual;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top