Onde s??o permitidos par??metros din??micos

Os par??metros din??micos podem ser utilizados em qualquer lugar da express??o onde seu tipo de dado pode ser facilmente deduzido.
  1. ?? permitido o uso como primeiro operando do BETWEEN, se o segundo ou o terceiro operando n??o for um par??metro din??mico. O tipo de dado do primeiro operando ?? assumido como sendo o tipo de dado do par??metro que n??o ?? din??mico, ou o resultado da uni??o dos tipos do segundo e do terceiro operandos, se estes dois n??o forem par??metros din??micos.
    WHERE ? BETWEEN DATE('1996-01-01') AND ?
    -- tipos assumidos como sendo DATE
    
  2. ?? permitido o uso como segundo ou terceiro operando do BETWEEN. O tipo de dado ?? assumido como sendo o tipo de dado do operando ?? esquerda.
    WHERE DATE('1996-01-01') BETWEEN ? AND ?
    -- tipos assumidos como sendo DATE
    
  3. ?? permitido o uso como operando ?? esquerda da lista IN se pelo menos um item da lista n??o for um par??metro din??mico. O tipo de dado do operando ?? esquerda ?? assumido como sendo o resultado da uni??o dos tipos de dado dos par??metros n??o din??micos da lista.
    WHERE ? NOT IN (?, ?, 'Santiago')
    -- tipos assumidos como sendo CHAR
    
  4. ?? permitido o uso na lista de valores do predicado IN, se o primeiro operando n??o for um par??metro din??mico, ou seu tipo foi determinado pela regra anterior. O tipo dos par??metros din??micos que aparecem na lista de valores ?? assumido como sendo o tipo do operando ?? esquerda.
    WHERE ColunaPontoFlutuante IN (?, ?, ?)
    -- tipos assumidos como sendo FLOAT
    
  5. Para os operadores bin??rios +, -, *, /, AND, OR, <, >, =, <>, <= e >=, ?? permitido o uso do par??metro din??mico como um dos operandos, mas n??o os dois. Seu tipo de dado ?? obtido a partir do tipo do outro lado.
    WHERE ? < CURRENT_TIMESTAMP
    -- tipo assumido como sendo TIMESTAMP
    
  6. A utiliza????o em CAST ?? sempre permitida, porque CAST fornece tipo de dado ao par??metro din??mico.
    CALL valueOf(CAST (? AS VARCHAR(10)))
    
  7. ?? permitido o uso nos dois lados do operador LIKE. Quando utilizado no lado esquerdo, o tipo de dado do par??metro din??mico ?? definido como sendo o tipo de dado do operando ?? direita, mas com o comprimento m??ximo permitido para o tipo de dado. Quando utilizado no lado direito, o tipo de dado ?? assumido como sendo do mesmo comprimento e tipo de dado do operando ?? esquerda (LIKE ?? permitido nos tipos de dado CHAR e VARCHAR; para obter mais informa????es deve ser consultado Concatena????o).
    WHERE ? LIKE 'Santi%'
    -- tipo assumido como sendo CHAR com comprimento igual a
    -- java.lang.Integer.MAX_VALUE
    
  8. O par??metro ?, sem mais nada, ?? permitido em apenas um dos lados do operador ||, ou seja, "? || ?" n??o ?? permitido. O tipo do par??metro ? de um dos lados do operador || ?? determinado pelo tipo da express??o do outro lado do operador ||. Se a express??o do outro lado for do tipo de dado CHAR ou VARCHAR, o tipo do par??metro ser?? VARCHAR com o comprimento m??ximo permitido para o tipo de dado. Se a express??o do outro lado for do tipo de dado CHAR FOR BIT DATA ou VARCHAR FOR BIT DATA, o tipo de dado do par??metro ser?? VARCHAR FOR BIT DATA com o comprimento m??ximo permitido para o tipo de dado.
    SELECT coluna_bit || ?
    FROM tabela_usuario
    -- tipo assumido como sendo CHAR FOR BIT DATA
    -- com o comprimento especificado para coluna_bit
    
  9. Em uma express??o condicional, que utiliza ?, tamb??m ?? permitida a utiliza????o do par??metro din??mico (que tamb??m ?? representado por ?). O tipo do par??metro din??mico como primeiro operando ?? assumido como sendo booleano. Com rela????o ao segundo e terceiro operandos, somente um dos dois pode ser um par??metro din??mico, e seu tipo ?? assumido como sendo o mesmo do outro operando (ou seja, o terceiro e segundo operando, respectivamente).
    SELECT c1 IS NULL ? ? : c1
    -- permite especificar o valor "padr??o" em tempo de execu????o
    -- o par??metro din??mico ?? assumido como tendo o tipo de c1
    -- n??o podem haver par??metros din??micos dos dois lados dos :
    
  10. ?? permitido usar par??metro din??mico como item da lista de valores ou da lista de sele????o da instru????o INSERT. O tipo do par??metro din??mico ?? assumido como sendo o tipo da coluna de destino. O par??metro ?, sem mais nada, n??o ?? permitido na lista de sele????o, inclusive na lista de sele????o da subconsulta, a menos que exista uma coluna correspondente em UNION, INTERSECT ou EXCEPT (consulte o n?? 16, abaixo) que n??o seja din??mica.
    INSERT INTO t VALUES (?)
    -- o par??metro din??mico ?? assumido como sendo
    -- do tipo da ??nica coluna da tabela t
    INSERT INTO t SELECT ?
    FROM t2
    -- n??o ?? permitido
    
  11. O par??metro ? na compara????o com uma subconsulta recebe seu tipo a partir da express??o sendo selecionada na subconsulta. Por exemplo:
    SELECT *
    FROM tab1
    WHERE ? = (SELECT x FROM tab2)
    
    SELECT *
    FROM tab1
    WHERE ? = ANY (SELECT x FROM tab2)
    -- Nos dois casos, o tipo do par??metro din??mico ??
    -- assumido como sendo o mesmo tipo de tab2.x.
    
  12. ?? permitido usar par??metro din??mico como o valor em uma instru????o UPDATE. O tipo do par??metro din??mico ?? assumido como sendo o tipo da coluna na tabela de destino.
    UPDATE t2 SET c2 =? -- o tipo ?? assumido como sendo o tipo de c2
    
  13. N??o ?? permitido par??metro din??mico como operando dos operadores un??rios - e +.
  14. LENGTH permite par??metro din??mico. O tipo ?? assumido como sendo o comprimento m??ximo do tipo VARCHAR.
    SELECT LENGTH(?)
    
  15. Compara????es qualificadas.
    ? = SOME (SELECT 1 FROM t)
    -- ?? v??lido. O par??metro din??mico ?? assumido como sendo do tipo INTEGER
    1 = SOME (SELECT ? FROM t)
    -- ?? v??lido. O par??metro din??mico ?? assumido como sendo do tipo INTEGER
    
  16. ?? permitido usar par??metro din??mico para representar uma coluna se aparecer em uma express??o UNION, INTERSECT ou EXCEPT; O Derby pode inferir o tipo de dado a partir da coluna correspondente na express??o.
    SELECT ?
    FROM t
    UNION SELECT 1
    FROM t
    -- o par??metro din??mico ?? assumido como sendo INT
    VALUES 1 UNION VALUES ?
    -- o par??metro din??mico ?? assumido como sendo INT
    
  17. ?? permitido par??metro din??mico como operando ?? esquerda de uma express??o IS, sendo assumido como booleano.
Uma vez que o tipo de dado do par??metro din??mico tenha sido determinado baseado na express??o onde se encontra, esta express??o pode estar em qualquer lugar onde normalmente seria permitida se n??o inclu??sse o par??metro din??mico. Por exemplo, acima foi dito que o par??metro din??mico n??o poderia ser utilizado como operando do - un??rio. Entretanto, pode aparecer em express??es que s??o operandos do menos un??rio, como:
- (1+?)

O par??metro din??mico ?? assumido como sendo do tipo INTEGER (porque o outro operando operador bin??rio + ?? do tipo INT). Como se sabe seu tipo, ?? permitido como operando do - un??rio.

Refer??ncias relacionadas
Exemplo de par??metros din??micos