当前位置:  技术问答>linux和unix

应用程序中的一条sql语句

    来源: 互联网  发布时间:2016-04-08

    本文导语:  环境:Linux + oracke 10.2  有如下两张表:  我希望实现,一个作业只能属于一个A类型的任务。现在给定一个A类型的任务,判断他下面所有的作业只能属于这个任务,而不能再属于其它A类型的任务。也就是说,如果A...

环境:Linux + oracke 10.2 

有如下两张表: 
我希望实现,一个作业只能属于一个A类型的任务。现在给定一个A类型的任务,判断他下面所有的作业只能属于这个任务,而不能再属于其它A类型的任务。也就是说,如果A类型的任务101,它拥有编号为1作业时,那么其它A类型的任务就不能再拥有作业1了,而对于B类型的任务,就可以拥有作业1。例如:任务105不能再拥有作业1,表中有错误。而任务106则可以拥有作业1. 
请教sql语句:如何编写来检测到一个作业是否属于多个A类型的任务,检测到时报错。比如:任务101非法,因为有作业1属于多个A类型的任务 

谢谢! 

任务信息表:task_info 
    task_id  task_name  task_type 
    101        task1      'A' 
    102        task2      'B' 
    103        task3      'A' 
    104        task4      'B' 
    105        task5      'A' 
    106        task6      'B' 
    
    主键:task_id 
    
任务与作业关系表:task_job 
    task_id,  task_name, job_id 
    101      task1      1 
    101      task1      2 
    101      task1      3 
    102      task2      4 
    102      task2      5 
    103      task3      6 
    104      task4      7 
    104      task4      8 
    105      task5      1 
    105      task5      9 
    105      task5      10 
    106      task6      1 
    106      task6      1 
    
    主键:taskid, job_id 
  任务与作业是一对多的关系

下面是我尝试着写的,测试时是不对的,帮忙修改下,谢谢。

EXEC SQL DECLARE con_task_check_cur CURSOR FOR
         SELECT job_id
           FROM task_job
          WHERE task_id = 2;
 if( SQLCODE != SQLSUCC && SQLCODE != SQLNOTFOUND ) {
     err_log( __FILE__,__LINE__, "declare failed!" );
     return _FAIL_;
 }

 EXEC SQL OPEN con_task_check_cur;
 if( SQLCODE != SQLSUCC && SQLCODE != SQLNOTFOUND ) {
     err_log( __FILE__,__LINE__, "open failed!" );
     return _FAIL_;
 }

 while( 1 ) {
        EXEC SQL FETCH con_task_check_cur INTO :i_job_id;
        if( SQLCODE == SQLNOTFOUND )
            break;

        if( SQLCODE != SQLSUCC ) {
            err_log( __FILE__,__LINE__,"fetch failed![%d]", SQLCODE );
            suc_flag = _FAIL_;
            break;
        }


        EXEC SQL SELECT COUNT(*) INTO :con_task_cnt
                  FROM task_job T1, task_info T2
                 WHERE   T1.job_id  = :i_job_id
                   AND   T2.task_id = T1.task_id
                   AND T2.task_type = 1;

       if( SQLCODE != SQLSUCC && SQLCODE != SQLNOTFOUND ) {
           err_log( __FILE__,__LINE__, "select failed!" );
           suc_flag = _FAIL_;
           break;
       }

       if( con_task_cnt != 1 ) {
           printf( "作业[%d]属于多个A类型的任务", i_job_id );
           suc_flag = _NO_;
           break;
       }

    }

    if ( suc_flag == _YES_ )
       strcpy( G_err_msg, "SUCC");

    printf( "%sn", G_err_msg );
    return suc_flag;


|
好几年不写sql了,具体代码就不写了,讲个思路你可以试一下:
    101        task1      'A'
    103        task3      'A'
    105        task5      'A'
    
    
    101      task1      1
    101      task1      2
    101      task1      3
    102      task2      4
    102      task2      5
    103      task3      6
    104      task4      7
    104      task4      8
    105      task5      1
    105      task5      9
    105      task5      10
    106      task6      1
    106      task6      1
   
select task_info.task_id   
from task_job,task_info
while task_info.task_id=task_job.task_id &&task_type='A'   //取出所有任务类型为'A'的作业
groub task_job.job_id                                     //使用作业号分组
order by count(task_job.job_id)>=2                          //如果有超过两个的相同作业号,那就是说明有多个任务拥有了同一个作业了。

//代码可能不正确,不过思路就是这样
先用过程理清思路,再写CURSOR

    
 
 

您可能感兴趣的文章:

  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 如何将应用程序加到桌面或应用程序组?
  • 怎样开发在LINUX 上运行的应用程序,像WINDOWS桌面应用程序一样
  • 我要监测一台远程电脑的状态(未上线/上线但没打开每个应用程序/上线且打开应用程序),该如何作?
  • QT的应用程序中如何获取程序执行的路径?
  • asp.net应用程序的生命周期和iis应用程序池
  • 把java源程序生成应用程序有哪些方法?
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • 手动执行应用程序ok,但用crontab(在正确的用户名下)运行应用程序就报-12545(tns连接错误),怎么解决?
  • 一个程序能否控制其他应用程序?
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • JAVA 应用程序小程序中能不能运行其它程序(.EXE)的 如果能请问应该怎样调用?
  • 运行什么程序都提示没有找到msvbvm5.0.dll,因此这个应用程序未能启动
  • 终端打开应用程序,怎样使当终端退出时应用程序不退出.问了好多人,其实很简单.
  • 走虚拟网卡内核程序和走物理网卡应用程序结合问题
  • 请问如何设置驱动程序和应用程序的启动顺序和优先级呢?
  • 学了linux程序设计后能不能编写出应用程序
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • java.exe-应用程序错误(程序一运行就报错)
  • java的应用程序中如何定义一个全局变量,在程序的任何地方都可以修改使用?
  • 深入C#任务管理器中应用程序选项隐藏程序本身的方法详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux 桌面应用程序和web应用程序编写常用的语言
  • 请问如何通过telnet的方式启动服务器(solaris)上的用.sh角本方式启动java写的应用程序,在退出telnet时服务器上的应用程序不会退出?
  • 菜鸟请教,应用程序如何判断驱动程序已经挂载成功
  • 请教高手,如何在java中调用其他应用程序(该程序主要进行数据库操作)
  • 驱动程序(模块)怎样与应用层交互呀?也就是应用程序怎样控制驱动程序?让其做什么它就做什么。
  • Web应用程序框架 Tapestry
  • redhat下为一程序在应用程序->internet菜单里建立一个快捷方式(菜单项),为何点击后提示权限不够?
  • 应用程序为普通用户所有,不改变其所有,如何在程序中使用超级用户级别的函数啊
  • Java GUI应用程序开发框架 Axualize
  • 应用程序中获取读取设备文件的权限
  • 请教一下在驱动里怎么调用应用程序
  • 如何在应用程序中使用SDL库
  • 应用程序如何调用sd卡
  • 用jbuilder开发的程序,其中用到了xylayout,将应用程序做成了jar文件,运行jar文件时,提示错误。请大家多帮忙
  • 谁用友善之臂的板子,./应用程序 为什么不能运行程序
  • Linux应用程序启动器 Kupfer
  • s3c2410中断模块跟应用程序之间通信问题
  • 桌面Web应用程序引擎 HAE
  • 在应用程序中如何访问模块导出的函数
  • 应用程序如何使用sd卡


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3