Oracle 我可以在一个命令中执行多个SQL吗?

Oracle 我可以在一个命令中执行多个SQL吗?,oracle,Oracle,使用mssql sqlcommand,可以在执行的单个sql命令文本中执行多个查询 比如说 strSQL = @" DECLARE @strCOMPCD VARCHAR(4) SET @strCOMPCD = '{2}' DECLARE @strLANGCD VARCHAR(2) SET @strLANGCD = '{3}' DECLARE @strTMYEAR VARCHAR(4) SET @strTMYEAR = '{4}' DECLARE @strTMTERM VARCHAR(4) SET

使用mssql sqlcommand,可以在执行的单个sql命令文本中执行多个查询

比如说

strSQL = @"
DECLARE @strCOMPCD VARCHAR(4) SET @strCOMPCD = '{2}'
DECLARE @strLANGCD VARCHAR(2) SET @strLANGCD = '{3}'
DECLARE @strTMYEAR VARCHAR(4) SET @strTMYEAR = '{4}'
DECLARE @strTMTERM VARCHAR(4) SET @strTMTERM = '{5}'

DECLARE @strFromDate VARCHAR(10) SET @strFromDate = @strTMYEAR + '-' + @strTMTERM + '-' + '01'
DECLARE @strToDate VARCHAR(10) SET @strToDate = CONVERT(VARCHAR(10), DATEADD(DAY, -1, DATEADD(MONTH, 1, @strFromDate)) ,120)

DECLARE @strFromDate1 VARCHAR(10) SET @strFromDate1 = @strTMYEAR + '-01-01'
DECLARE @strToDate1 VARCHAR(10) SET @strToDate1 = CONVERT(VARCHAR(10), DATEADD(DAY, -1, @strFromDate) ,120)

SELECT      
        A.*
        , H.OBTEXT
        , I.NAMEKO
        , ISNULL(B.USECNT, 0) AS USECNT
        , ISNULL(C.DAFCNT, 0) - ISNULL(D.USECNT, 0) AS CARCNT
        , ISNULL(E.DAFCNT, 0) - ISNULL(B.USECNT, 0) AS NUSCNT
        , ISNULL(F.WRKCNT, 0) AS WRKCNT
        {7}
...
INSERT ...

DELETE ...
";
但是,在oracle中,我不能在一个命令中执行多个查询

有什么解决办法吗?(不拆分每个oracle sql命令)

使用(OracleConnection连接=新的OracleConnection(connString))
{
尝试
{
字符串strSQL=@”
声明
:VAR1 VARCHAR(4)
:VAR1 VARCHAR(4)
将字段1选择到:VAR1中
从测试1开始
其中COMPCD='XXXX'
而EMPNUM='YYYY'
选择TEST2到:VAR2
来自测试2
其中COMPCD='XXXX'
而EMPNUM='YYYY'
... 
如果:VAR1'XXXX'
:VAR1='NEWVAL'
选择字段1,字段2,
FUNC_A(:VAR1),
FUNC_b(:VAR2)
从测试3开始

您需要创建一个匿名块。示例如下:

DECLARE 
  VAR1 number;
  VAR2 number;
BEGIN

  select FIELD1  
    into VAR1
    from test1
   where COMPCD = 'XXXX' 
     AND EMPNUM = 'YYYY';  

  select TEST2   
    into VAR2
    from test2
   where COMPCD = 'XXXX' 
     AND EMPNUM = 'YYYY';     

  IF VAR2 > 0 THEN
    dbms_output.put_line('2: '|| to_char(VAR2)); 
    var2 := 64;
  END IF; 
END;

您想在执行后从命令返回任何内容吗?@Sachu是的,我通过refcursors为每个select查询返回内容,谢谢
DECLARE 
  VAR1 number;
  VAR2 number;
BEGIN

  select FIELD1  
    into VAR1
    from test1
   where COMPCD = 'XXXX' 
     AND EMPNUM = 'YYYY';  

  select TEST2   
    into VAR2
    from test2
   where COMPCD = 'XXXX' 
     AND EMPNUM = 'YYYY';     

  IF VAR2 > 0 THEN
    dbms_output.put_line('2: '|| to_char(VAR2)); 
    var2 := 64;
  END IF; 
END;