Oracle 动态SQL中如何参数化表名

DECLAREV_COUNTNUMBER(3);V_NUMNUMBER(2);V_IDNVARCHAR2(19);FLAGBOOLEAN:=TRUE;V_TABNVARC... DECLARE
V_COUNT NUMBER(3);
V_NUM NUMBER(2);
V_ID NVARCHAR2(19);
FLAG BOOLEAN := TRUE;
V_TAB NVARCHAR2(50) :='&TAB_NAME';

BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||V_TAB INTO V_COUNT;
WHILE FLAG LOOP
SELECT SUBSTR(SYS_GUID(),1,19) INTO V_ID FROM DUAL;
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||V_TAB||' WHERE ID =:ID' INTO V_NUM USING V_ID;
IF V_NUM = 0 THEN
DBMS_OUTPUT.PUT_LINE(V_ID);
V_ID := '';
V_COUNT := V_COUNT - 1;
IF V_COUNT = 0 THEN
FLAG := FALSE;
END IF;
END IF;
END LOOP;
END
代码如上,执行时一直提示第10行是无效SQL。要怎么解?
展开
 我来答
己罗S3
2017-12-16 · TA获得超过1233个赞
知道小有建树答主
回答量:1.2万
采纳率:39%
帮助的人:377万
展开全部
  表名可用变量,但一般需要用到动态sql,举例如下:
  declare
  v_date varchar2(8);--定义日期变量
  v_sql varchar2(2000);--定义动态sql
  v_tablename varchar2(20);--定义动态表名
  begin
  select to_char(sysdate,'yyyymmdd') into v_date from dual;--取日期变量
  v_tablename := 'T_'||v_date;--为动态表命名
  v_sql := 'create table '||v_tablename||'
  (id int,
  name varchar2(20))';--为动态sql赋值
  dbms_output.put_line(v_sql);--打印sql语句
  execute immediate v_sql;--执行动态sql
  end;
  执行以后,就会生成以日期命名的表。
追问
你的过程中,对表名的参数化是后续用一个语句进行赋值的,我上边的是直接在执行过程中输入的。但是输入后运行到第10行就会报错。我项问的是为啥就报错了,我的脚本是不是有错?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式