开发实习日记10.10

本文档详细介绍了GENERO BDL的基本语法,包括变量定义、数据结构、控制输出格式、函数和流程控制等。通过示例展示了如何定义变量、记录、数据库结构,以及如何使用LET、INITIALIZE、IF、CASE、FOR、WHILE等控制结构。此外,还涵盖了全局变量、局部变量和模块变量的生命周期,并提供了错误处理和程序暂停的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GENERO BDL基本语法

变量定义(DEFINE)

直接定义变量:DEFINE 变量名 变量类型
定义变量对应数据库字段:DEFINE 变量名 LIKE 数据表.数据字段

# 直接定义 employee_no 变量, 类型是 CHAR(10)
DEFINE employee_no CHAR(10)

# 定义 p_employee_no 和数据库对应
DEFINE p_employee_no LIKE employee_file.employee_no,
       p_team_no SMALLINT,
       p_join_date, p_birthday DATE

变量集合(RECORD )

直接定义变量集合(Records)

例:直接定义 rec 这个 Records 中的各个变量类型。

DEFINE rec RECORD # 定义rec这个变量,它是个RECORD,是个变量集合
    id INTEGER,
    name VARCHAR(100),
    birth DATE
END RECORD
 

定义变量集合对应数据库字段

两种方法

1: 直接对应数据库中的字段

DATABASE example_database

MAIN
	DEFINE cust01 RECORD LIKE customer.*
END MAIN

2:分别对应数据库中的字段

DATABASE example_database

MAIN
    DEFINE cust02 RECORD
        id LIKE customer.id,
        name LIKE customer.name,
        birth LIKE customer.birth,
        sales LIKE salesman.name
    END RECORD
END MAIN
 

数据结构(TYPE)

使用数据结构TYPE[PRIVATE|PUBLIC] TYPE 变量名 变量类型

PUBLIC TYPE rpt_order RECORD
    order_num INTEGER,
    store_num INTEGER,
    order_date DATE,
    fac_code CHAR(3)
END RECORD

MAIN
    DEFINE o rpt_order #使用数据结构 rpt_order 并取名为 o
    DECLARE order_c CURSOR FOR
    SELECT order_num, store_num, order_date, fac_code FROM orders
    START REPORT order_list
    FOREACH order_c INTO o.*
    OUTPUT TO REPORT order_list(o.*)
    END FOREACH
    FINISH REPORT order_list
END MAIN
 







变量赋值(LET)、初始化(INITIALIZE)

若变量形态为 CHAR 和 VARCHAR 时,指定给予的值有差异

当为char时 字符串末尾带有一个空格

当为varchar时,字符串末尾不带空格

初始化变量集合(INITIALIZE)
用于初始化一组 RECORD 变量为 NULL,或者是初始化为数据库 Table 的默认值:

INITIALIZE 变量串行 { LIKE 字段串行 | TO NULL }

MAIN
    DEFINE cr RECORD LIKE customer.*
    INITIALIZE cr.cust_name TO NULL #初始化cr的cust_name字段为NULL
    INITIALIZE cr.* LIKE customer.* #初始化cr的变量为customer表的值
END MAIN
 

常数(CONSTANT)

定义常数CONSTANT constant_id [data_type] = value

CONSTANT c1 = "Drink" -- 自行定义为 STRING
CONSTANT c2 = 4711 -- 自行定义为 INTEGER
CONSTANT c3 SMALLINT = 12000 -- 自行纠正为 INTEGER
CONSTANT c4 CHAR(10) = "abc" --  按照定义为 CHAR(10)

 

 说明:表达式[start,end]表示从字符串中取出子字符串,此表示方式仅能用在 CHAR 或

 如果要从string中提取子字符串,则要用substring()方法

全局变量(GLOBALS)

语法一:直接写定 GLOBALS 区块

GLOBALS
	declaration-statement
	[,...]
END GLOBALS

语法二:读入已写好的共同配置文件(外部档案)

GLOBALS "filename"

变数的生命周期(LOCALE、MODULE、GLOBAL)

LOCAL变量(Local Variables)

    定义位置:定义在 Module 中的函式里 (MAIN、FUNCTION 等)
    生命周期:只属于该定义的函式使用,离开此函式即不能再使用。

MODULE变量(Module Variables)

    定义位置:Module 中,但不被任何的函式包围。
    生命周期:为该 Module 中的共享变数。

GLOBAL变量(Global Variables)

    定义位置:由 GLOBALS 及 END GLOBALS 所包围的变数。
    生命周期:使用的所有 MODULE 的共享变量。
 

变数的举例

SCHEMA ds

GLOBALS
    DEFINE g_employee CHAR(10) --GLOBAL
END GLOBALS

DEFINE g_tty CHAR(32) --MODULE

MAIN
    DEFINE answer CHAR(1) --LOCAL
END MAIN

FUNCTION ins_employee()
    DEFINE flag CHAR(1), --LOCAL
    change SMALLINT    --LOCAL
END FUNCTION

控制输出格式(USING)

 输出格式举例

MAIN
    DEFINE i,j SMALLINT
    LET i = 12345
    LET j = -12345
    DISPLAY i
    DISPLAY j
    DISPLAY i USING"*******"
    DISPLAY j USING"*******"
    DISPLAY i USING"&&&&&&&"
    DISPLAY j USING"&&&&&&&"
    DISPLAY i USING"#######"
    DISPLAY j USING"#######"
    DISPLAY i USING"<<<<<<<"
    DISPLAY j USING"<<<<<<<"
    DISPLAY i USING"-------"
    DISPLAY j USING"-------"
    DISPLAY i USING"+++++++"
    DISPLAY j USING"+++++++"
    DISPLAY i USING"$$$$$$$"
    DISPLAY j USING"$$$$$$$"
    DISPLAY i USING"(######)"
    DISPLAY j USING"(######)"
    DISPLAY i USING"###,###.&&"
    DISPLAY j USING"###,###.&&"
END MAIN

MAIN
    DISPLAY TODAY
    DISPLAY TODAY USING "yyyy-mm-dd"
    DISPLAY TODAY USING "yy-mm-dd"
    DISPLAY TODAY USING "yy-mmm-ddd"
END MAIN

函数、流程控制

引入链接库(跳过)IMPORT





SCHEMA / DATABASE 声明数据库

使用 SCHEMA 声明数据库时,只会在编译过程中使用到声明的功能,执行程序时并不会与数据库进行实质联机。
使用 DATABASE 声明数据库时,编译时功能相同,但执行时即会链接数据库。

MAIN 函数与设定区块

MAIN 函数是程序执行的入口,一个完整可执行的程序只能有一个 MAIN 函数

MAIN
	DISPLAY "hello world!"
END MAIN

FUNCTION 函数

语法:[PUBLIC | PRIVATE ] FUNCTION function_name( [arg [ , … ] ] )

CALL 执行指定的函数,若有回传值,以 RETURNING 接回。

MAIN
    CALL say_hello_public()
    CALL say_hello_private()
END MAIN

FUNCTION say_hello_public()
    DISPLAY "Hello, world!"
END FUNCTION

PRIVATE FUNCTION say_hello_private()
    DISPLAY "Hello, Private!"
END FUNCTION

试一下这个代码

||符号问题

MAIN
    DEFINE var1 CHAR(10)
    DEFINE var2 CHAR(2)
    LET var1 = foo()
    DISPLAY "var1 = " || var1 -- var1 = Hello
    CALL foo() RETURNING var2
    DISPLAY "var2 = " || var2 -- var2 = He
    DISPLAY "foo() = " foo() -- foo() = Hello
END MAIN

FUNCTION foo()
    RETURN "Hello"
END FUNCTION

IF

IF condition THEN
    statement
    [...]
ELSE
    statement
    [...]
END IF

CASE

语法1格式:适用于判断式比较简单,如只需判断1个数字

MAIN
    DEFINE v CHAR(10)
    LET v = "C1"
    CASE v
        WHEN "C1"
            DISPLAY "Value is C1"
        WHEN "C2"
            DISPLAY "Value is C2"
        WHEN "C3"
            DISPLAY "Value is C3"
        OTHERWISE
            DISPLAY "Unexpected value"
    END CASE
END MAIN

语法2格式:适用于适用于判断式较复杂

MAIN
    DEFINE v CHAR(10)
    LET v = "C1"
    CASE
        WHEN ( v="C1" OR v="C2" )
            DISPLAY "Value is either C1 or C2"
        WHEN ( v="C3" OR v="C4" )
            DISPLAY "Value is either C3 or C4"
        OTHERWISE
            DISPLAY "Unexpected value"
    END CASE
END MAIN

FOR

语法:默认情况 STEP = 1

MAIN
    DEFINE i, i_min, i_max INTEGER
    LET i_min = 1
    LET i_max = 10
    
        FOR i = i_min TO i_max # 正序
            DISPLAY i
        END FOR

        FOR i = i_max TO i_min STEP -1 #反序
            DISPLAY i
        END FOR
END MAIN

WHILE

MAIN
    DEFINE a,b INTEGER
    LET a = 20
    LET b = 1
    
    WHILE a > b
        DISPLAY a , " > " , b
        LET b = b + 1
    END WHILE
    
END MAIN

CONTINUE

MAIN
    DEFINE i INTEGER
    LET i = 0
    WHILE i < 5
        LET i = i + 1
        DISPLAY "i = " || i
        CONTINUE WHILE
        DISPLAY "This will never be displayed !"
    END WHILE
END MAIN

EXIT

语法:离开控制段。

MAIN
    DEFINE i INTEGER
    LET i = 0
    
    WHILE TRUE
        DISPLAY "This is an infinite loop. How would you get out of here ?"
        LET i = i + 1
        IF i = 100 THEN
            EXIT WHILE
        END IF
    END WHILE
    
    DISPLAY "Well done."
END MAIN

TRY…CATCH

针对重要 SQL 指令可以预先设置专用的错误处理指令

TRY
    [待侦测是否会发生问题的程序段落]
CATCH
    [处理问题或回报讯息的程序段落]
END TRY

SLEEP

语法:程序依指定秒数暂停。

MAIN
    DISPLAY "Please wait 5 seconds..."
    SLEEP 5 #暂停5秒
    DISPLAY "Thank you."
END MAIN

1. 实习公司简介 北京东方迪格软件有限公司是一家专业的高校实验室解决方案商,公司致力于我国高等院校实验室管理系统和实训方案的构建与实施,专注于高等院校实验室管理信息系统( MIS )方面的设计、开发、销售和技术服务等业务。 2. 今天是我来到北京东方迪格软件有限公司实习的第一天。我提前了半个小时来到了办公室,我发现同事们也已经陆续的到达了。我首先找到了行政部的田小姐办理了入职的必要手续,她很热情地给我介绍了公司的整体概况,同时交给了我一些公司产品的简介和操作手册。这是我进入公司实习的第一步,了解公司的企业文化,以及公司的主要业务和产品。 上班第一天,没什么工作,老板和其他的工作人员都很忙,我也就知趣的找个地方呆着,开始翻阅着手头已经拿到的资料。刚来公司,自己就要机灵些,要谦虚好学,多去了解,要去观察去倾听,看忙着的人是怎样做事的,他们是如何与人打交道的。 3. 我被分配到了技术部,技术部主要负公司软件产品的安装以及售后维护,需要对公司产品的原理和概念有深入彻底的了解同时还需要有和客户交流沟通的技巧和能力。技术部的软件安装维护工作虽然是企业部门运营的一个小侧面,但关系到企业在广大客户心目中的形象,关系到企业参与全国范围的计算机软件销售竞争的魄力及品牌亲和力。 虽然我之前对计算机软件这方面的知识有所了解,但公司的这些软件以前都没有接触过,所以还是需要学习大量的知识。公司的软件产品主要是金融、保险、银行类的实验室教学软件,要想了解这些软件产品除了要有基本的计算机知识外还需要有金融、保险、银行方面的专业知识。接下来的时间要学习的东西还有很多。 4. 今天技术部有经验的同事给我仔细讲解了公司软件产品安装和维护中的每一款注意事项,还现场演示了公司的一款叫“商业银行综合柜面业务实训教学软件”的软件产品的安装流程以及操作系统、软件系统的配置。 下午我公司行政部田小姐为我分配了一台笔记本电脑,作为我的工作之用。我开始练习公司软件产品的安装和操作演示。 5. 公司的软件产品所使用的数据库各不相同,有MS SQL Server、MYSQL、ORACLE、Db2、Sybast、informix等等,我在学校里面接触的数据库软件仅仅只有MS SQL Server这一种。现在终于体会到人们在说“书到用时方恨少”这句话时的无奈心情了。从上午开始,我尝试着上网去查找相关数据库的一些资料,下载了一些教程来自习,希望能对这些数据库软件能有一个初步的了解。 6. 今天一个客户给我们打来电话说他们使用的软件不能连接上服务器了,这款软件昨天还是可以正常使用的。我们的第一反应是不是客户端软件的缺陷导致软件故障。询问了有关软件出现故障时的错误提示信息后初步判断是由于客户误操作修改了服务器的IP地址,于是引导客户修改服务器的IP,之后故障消失。 认真细致,不放过任何一个细节。这是我今天的感悟。 7. 北京东方迪格软件公司于2006年4月底顺利通过ISO9001(2000版)国际质量体系认证,公司的管理已经比较规范了。每周一上班之后部门经理会召集本部门的人员召开一次总结早会,由每个成员轮流总结发言自己过去一周说做的工作以及完成情况和还存在的问题。每天下班时间到来时需要登录公司的在线办公平台填写自己一天所做的工作以及完成情况和需要解决的问题,每周五下班之前也要填写这一周的工作总结和下周的工作计划,部门经理和总经理会查看每一个人的记录并作出点评。这些措施有利于每一名员工做好自己的工作计划和总结,部门经理和总经理也能借助这个平台掌握员工的工作状态及存在的主要问题,利于他们作出合理的决策。 8. 与人和睦相处,良好的进行沟通,是一名实习生必须要学会的。在与人相处方面,我一直坚信,诚实加真心,自尊与尊重他人,肯定不会被拒于千里之外的。首先和同事相处,我只是一个实习生,很多事情要多看多学,我所有的同事都是我的老师,前辈,工作过程中,怎么发挥团队的作用,协调内部关系,我学会的是尊重和礼貌。做为一名技术支持部门得员工,直接面对的是客户,你的工作的质量甚至一句话都可以影响客户对公司以及公司的软件产品的信心。如何在配合销售部门给客户演示产品时用恰当的语言把公司的软件产品的优良特性展现给客户,让客户听能真正了解自己的需求,同时信赖我们的软件产品,进而选择和你合作,是作为一名技术部门的员工所必须要学习的课程。当然,光有这些还是不够的,我们还得有过硬的专业知识,在客户遇到技术问题时我们能第一时间高效准确的处理故障,这样才能真正建立客户对我们产品的认可度。 9. 今天中午下班时间到了,由于中午的休息时间不多所以大家都是叫快餐在公司吃饭。我来到这里也有一段时间了,对这里也有一点熟悉了,于是我也就自告奋勇的说要帮大家定一次快餐。很快,我顺利的为大家定好了快餐。吃饭时闲聊,大家除了对我说了些客气的话外,有两个看似资历很老的同事还说我很好学,还知道我上午都看了些什么,姜还是老的辣,就这样悄无声息的去观察你。所以,有的时候你不要怀疑自己做的无法得到认可,其实有人已经看在眼里了。下午也就是自己看公司的软件资料了,一天很快就过去了。 10. 今天周五,我们下班之后同事们决定把办公室收拾收拾,我一看,这我也不能干站着看啊,就帮着一起忙活起来了,说实话因为北方的干燥加沙尘天气,办公室里面总是很快就会堆积灰尘,确实应该好好清理一下了,我们几个人差不多忙活了一个多小时,把地面,窗户什么的都擦哦干干净净的,可累坏我了。不过看着干净的办公室,那心情好的确实没法说。这毕竟是每天上班的地方,呆的时间长,环境好,心情也好,工作效率也就高。 11. 今天周一,我们经理说下午要开会,需要制作一个PPT,他上午没有空,问我们几个谁能给他做一下PPT。我对做PPT还是蛮熟悉的,就自告奋勇的承担 了这一任务。我向他要来了下午开会的大体内容并询问了一下他的大体意见,样式之类的,之后就开始忙活了。其实,单做一个基本的PowerPoint文件不用多少时间,但要做出一个图文并茂、生动的ppt就不容易了。我借助网络的力量,收集在线模板,查找图片素材差不多用了一个上午的时间终于完成了这个PPT。下午开会使用这个PPT一切顺利。 12. 今天下午刚上班不久,公司一同事要打一份客户资料,可能是他还有其他重要的事情要忙,就把这个资料交到我手里说能不能帮他打这份资料。我是新来的员工,比较不忙,哪能说不行啊,就接过来了。接过来我一看,好家伙,密密麻麻少说也有三四千字啊,没办法,赶紧开始打吧。好在我在学校也经常打字练习,盲打每分钟也能打六七十个汉字,经过一个多小时的工作,终于完成任务了! 这件事情让我觉得平时点滴的积累真的是很重要,如果我以前从不练习打字的话,今天这任务估计就不能这么顺利完成了。 13 今天下午3点左右公司接到一个客户的点话说,他使用我们的软件准备第二天的上机实践课的时候电脑忽然黑屏了,而且接下来就开不了机了。我们一听,觉得如果不是他的电脑出现故障的话就是我们的软件跟其他软件起冲突破坏了操作系统。我们觉得事态严重,如果不及时处理就会严重影响我们公司软件产品的声誉。于是我跟着技术部的另一个同事马上赶到了客户那里。我们查看了那个电脑,试着按下电源开关,电源灯只是闪了一下就没有反应了。我首先的感觉就是,这应该是电脑的硬件故障,不是我们的软件故障,但基于对客户负责的态度,我们帮客户检查了一下机箱,发现CPU风扇已经不转了,应该是风扇先坏掉导致CPU过热而烧毁。我们建议客户更换CPU并加装更大功率的CPU风扇,注意防尘。之后故障排除,客户电脑恢复正常,又可以继续使用我们的软件了。 14. 今天公司给我和另一位新来的技术部的同事进行了第一次培训。培训的内容主要有:1.产品的演示与操作。2.产品演示与销售之间的流程和关联(注重配合)3.技术流程(演示、培训)4.技术职责,前景。5.学校项目申报和审批流程。6.方案的撰写和实施。我们还讨论了个人的职业发展规划。 15. 今天我准备学习下方案的撰写,一个成功的方案设计除了内容充实、要有很强的可行性之外,规范的格式也是必不可少的。而要排版出美观规范的板式就需要有扎实的OFFICE功底了。针对方案的设计要求,我重点关注了目录的生成、项目符号、编号以及表格设计等。 这些OFFICE方面的知识其实以前在学校也或多或少的接触过,只是因为长时间不使用而变地生疏了。经过查看OFFICE方面的书籍以及上网查找,不但复习了旧的知识还学到了不少新知识。看来“温故而知新”这句话真的是很有道理的啊。 16. 今天上班的时候忽然发现,办公室里面的每一台电脑的网速都很平均,不像在学校宿舍里面自己组建的网络有的快有的慢。询问了同事之后终于知道了缘由。原来这里的网线布置的比较合理,这里一律是交换机上插几个下一级的交换机,再把所有的机器都接在下一级的计算机上。这样,大家的速度都比较平均,而且单位里没有人利用电驴之类的BT软件不停的下载。而我们学校宿舍里的网络因为交换机不足的原因基本都是有人接在上一级交换机上,有的接在下一级的交换机上,还经常有人一直开着BT软件下载电影之类的。这样宿舍的网络就速度不品均而且慢了。 合理的布局能带来工作效率的提高。 17. 今天在和一个同事交流的时候得到了一个好东西,我发现这位同事有一本工作日记,我跟他借来看了一下,里面记载的都是他在工作中遇到的各种各样的问题,有遇到问题的时间、地点、故障的触发条件、故障现象的详细描述、合理的解决方法以及心得体会等等。这些都是宝贵的工作经验财富,我抱着看了一天,真是长见识啊。我马上也决定开始做一本这样的详细的工作日志,这对自己以后的工作学习一定大有裨益。 18. 今天,单位财务部的一个同事悄悄的把我叫到她那里,原来,他在上网的时候不小心点击了一个流氓网站,之后IE的主页被修改成那个流氓网站并且被锁定了,很讨厌。而她不像我们是学计算机的,自己不会处理,又不好意思让其他同事来帮忙,毕竟在工作时间上网也不是什么光彩的事情,只好求我这个“外人”帮忙了。 我过去之后看了下,这种问题一般就是几个地方:第一,直接修改IE的Internet选项里面的主页。第二,修改注册表,把流氓网址写入注册表,让IE的Internet选项里面的主页变灰,同时锁定注册表。第三,在快速启动栏的IE快捷方式属性的目标里面加入流氓网址。第四,这中一般比较少见,就是直接在受害者电脑里面植入木马,实时监视IE的主页,一旦发现有改动就立即重新恢复为流氓网址。 清楚了以上这这些问题就好解决了,我使用工具将IE的主页强制恢复为空白页并修复注册表的异常键值,然后进入安全模式使用最新的杀毒软件彻底查杀一遍,之后问题解除。 19. 今天是我在单位实习的最后一天了,今天的工作主要就是办理好交接手续,同时做好实习材料的整理并找单位相关部门盖好公章。 在这个大家庭里面呆了这么长一段时间,就要离开了,真有点舍不得。同事们都为我送来了临别的祝福。很感激在实习的这段时间大家给我的关照,谢谢东方迪格的同事们。 20. 实习生活终于结束了,通过这段时间的实习,不但让我学到了很多新的专业知识,还学到了很多在学校里面学习不到了知识,让我学会了怎么样更好的处理跟同事们的人际关系以及如何更好的跟客户交流沟通,这些对于马上就要离开校园走上工作岗位的我来说至关重要啊。 马上就要启程回到熟悉的校园了,想到很快就能跟分别很久的同学们见面真的很高兴。母校,我回来啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值