DECLARE
p_dblink VARCHAR2(128):= 'AA';
 V_sql  VARCHAR2(10000);
 V_servername  VARCHAR2(128);
BEGIN
V_sql := 'SELECT NAME  FROM INSTANCES WHERE LINK ='||p_dblink;
execute immediate V_sql INTO V_servername;
DBMS_OUTPUT.PUT_LINE(V_servername);
END;
写这种命令的时候||和'老是不知道怎么用.寒!!!!

解决方案 »

  1.   

    DECLARE
      P_DBLINK     VARCHAR2(128) := 'AA';
      V_SQL        VARCHAR2(10000);
      V_SERVERNAME VARCHAR2(128);
    BEGIN
      V_SQL := 'SELECT NAME  FROM INSTANCES WHERE LINK =''' || P_DBLINK || '''';
      EXECUTE IMMEDIATE V_SQL
        INTO V_SERVERNAME;
      DBMS_OUTPUT.PUT_LINE(V_SERVERNAME);
    END;
    /
      

  2.   

    V_sql := 'SELECT NAME  FROM INSTANCES WHERE LINK ='||''''||p_dblink||'''';
      

  3.   

    V_SQL := 'SELECT NAME  FROM INSTANCES WHERE LINK =''' || P_DBLINK || '''';
    的确可以运行.可是能否解释下前面三个'''和后面三个''''
      

  4.   

    因为2个'就相当于一个'
    所以前面的就相当于
    SELECT NAME  FROM INSTANCES WHERE LINK ='
    ||是连接符,连接 p_dblink的变量
    最后的四个,中间两个就等于一个单引号,外面是引用字符
    所以加起来就是
    SELECT NAME  FROM INSTANCES WHERE LINK ='p_dblink’
      

  5.   

    建议楼主在执行execute immediate时候
    先改成dbms_output.put_line看看sql是什么,再执行