来看段超简单的脚本
SELECT * FROM tmpes t;
DECLARE CountFlag INTEGER;
BEGIN
SELECT COUNT(*) INTO CountFlag FROM tmpes;
IF(CountFlag>0) THEN
DELETE FROM tmpes;
END IF;
         INSERT INTO tmpes VALUES('1',2);
END;
以上脚本 无问题 查询X表是否有值 删除并插入数据
问题来了 这个BEGIN END;块后面 随便写个SQL 比如 SELECT * From x;
直接报错 "出现符号 SELECT"
出你妹啊 我在T-SQL 里想怎么写 怎么写!!!PL SQL太弱智 不行 强烈鄙视一下
有谁能给我整行的 谢谢了!!!!

解决方案 »

  1.   


    SELECT * FROM tmpes t;DECLARE CountFlag INTEGER;
    BEGIN
    SELECT COUNT(*) INTO CountFlag FROM tmpes;
    IF(CountFlag>0) THEN
    DELETE FROM tmpes;
    END IF;
      INSERT INTO tmpes VALUES('1',2);
    END;
    -- 要加一個斜線來執行
    /SELECT * FROM tmpes t;
      

  2.   

    SELECT * FROM tmpes t;
    DECLARE CountFlag INTEGER;
    BEGIN
    SELECT COUNT(*) INTO CountFlag FROM tmpes;
    IF(CountFlag>0) THEN
    DELETE FROM tmpes;
    END IF;
      INSERT INTO tmpes VALUES('1',2);
    END;
    /
    SELECT * FROM tmpes t;
      

  3.   

    delcare到end是一个执行单位.你后面写的select是另一个执行单位.执行的时候选中再执行.
      

  4.   

    想问下你过程后面加
    select语句起什么作用?
    oracle的过程里是不能直接 select * from tablename;的
      

  5.   

    --加个commit;和"/"执行符号
    DECLARE 
    CountFlag INTEGER;
    BEGIN
    SELECT COUNT(*) INTO CountFlag FROM tmpes;
    IF CountFlag>0 THEN
    DELETE FROM tmpes;
    END IF;
      INSERT INTO tmpes VALUES('1',2);
    commit;
    END;/
      

  6.   

    1、不同执行单位选中执行
    2、end以 ;/结束  具体请参考下面代码。
    declare 
           TYPE tbl_role_interg_record is record(
                typeId com_rule_integration_t.type_id%type,
                contractTypeId com_rule_integration_t.contract_type_id%type,
                orderTypeId com_rule_integration_t.order_type_id%type
           );
           role_record tbl_role_interg_record;
    begin
           select t.type_id,t.contract_type_id,t.order_type_id into role_record 
                  from com_rule_integration_t t where t.contract_type_id='&contract_type_id';
           dbms_output.put_line(role_record.typeid||':'||role_record.contracttypeid||':'||role_record.ordertypeid);
    end;
    /