请教一个oracle动态语句瓶装问题。我在存储过程里要执行类似这样的语句:
update table_name t set t.password='.'||id||'.'  ---id是表的一个字段
不再存储过程里能执行
写成 sqlstr:='update table_name t set t.password='||chr(39)||'.'||chr(39)||'id'||chr(39)||'.'||chr(39) ;
execute imedte** sqlstr请问要怎么样拼接这个字符串。谢谢

解决方案 »

  1.   

      --1.晕~~~
      sqlstr := 'update table_name t set t.pass=' || chr(39) || '.' || chr(39) ||
                '||id||' || chr(39) || '.' || chr(39);  --2.上面一个实在太难理解,这个吧
      sqlstr := 'update t1 set t1.pass=''.''||id||''.''';
      

  2.   


    --你不是想将这句sql:update table_name t set t.password='.'||id||'.'
    --拼接成动态sql嘛!
    --从上面的update语句可以看出来,password的组成为:.id.
    --所以,你的chr(39),也就是'这个符号可以不要了
    --得出下面两种方法,其实都一样
    sqlstr :='update table_name t set t.password='||'.'||id||'.';
    sqlstr:='update table_name t set t.password=.'||id||'.';更多关于单引号和双引号,请参考:

    oracle 中使用单引号(')和双引号(")
      

  3.   


    --如果你的本意是将单引号也加上的话,这样写:
    sqlstr :='update table_name t set t.password='''||'.'''||id||'''.''';
    sqlstr:='update table_name t set t.password=''.'''||id||'''.''';
      

  4.   

    --你不是想将这句sql:update table_name t set t.password='.'||id||'.'
    --拼接成动态sql嘛!
    --从上面的update语句可以看出来,password的组成为:.id.
    --所以,你的chr(39),也就是'这个符号可以不要了
    --得出下面两种方法,其实都一样
    sqlstr :='update table_na……
    [/Quote]试过了,这样写不行,提示必须明确标识符id。
      

  5.   

    楼主这个错别字啊。
    我看这个是密码验证,密码的话一般允许特别字符的。比如【-】等。
    这种情况最好用绑定变量,不要拼SQL语句。
      

  6.   

    2楼 的tangren 朋友两种写法都可以运行。谢谢你。我通常用第一中写法,你那第二个写法,我不大理解。