asp中关于<%call 某函数() %>的调用函数问题

asp中关于<%call 某函数() %>的调用函数问题,第1张

你是说,你调用函数照样能用而且不提示出错,但是函数中的功能部分缺失?

我看了半天,很明显你的functionasp不是在inc文件夹下,也就是说,<!--

#include

file="/inc/configasp"

-->

会提示你“未找到包含文件”,那么,之后的调用函数根本就不会执行到。

换言之,出现问题的根源是“调用文件不存在”。至于修改数据库链接这是必须的,改了文件夹之后,数据库位置的描述会影响某些子目录下文件的运行……如果必须要这样做,建议先建好文件夹再写文件。

VFP原程序文件扩展名为prg

VFP用到的其它文件的扩展名如下所示:

act 向导 *** 作图的文档

app 生成的应用程序或 Active Document

cdx 复合索引

chm 编译的HTML Help

dbc 数据库

dbf 表

dbg 调试器配置

dct 数据库备注

dcx 数据库索引

dep 相关文件(由“安装向导”创建)

dll Windows动态链接库

err 编译错误

esl Visual FoxPro支持的库

exe 可执行程序

fky 宏

frx 报表

fxp 编译后的程序

idx 索引,压缩索引

lbx 标签

log 代码范围日志

lst 向导列表的文档

mem 内存变量

mnt 菜单备注

mnx 菜单

mpr 生成的菜单程序

mpx 编译后的菜单程序

ocx ActiveX 控件

pjt 项目备注

pjx 项目

pqr 生成的查询程序

prg Visual FoxPro程序

qpx 编译后的查询程序

sct 表单备注

scx 表单

tbk 备注备份

txt 文本

第一个我能写出关系表达式,不过符号不好打哈,你call我,我告诉你。

第二个

create view vs_test

as

select eno,ename from emp inner join dept on empdno=deptdno

where sex='女'

一、什么是PL/SQL包

包就是一个把各种逻辑相关的类型、常量、变量、异常和子程序组合在一起的模式对象。包通常由两个部分组成:包说明和包体,但有时包体是不需要的。说明(简写为spec)是应用程序接口;它声明了可用的类型、变量、常量、异常、游标和子程序,包体部分完全定义游标和子程序,并对说明中的内容加以实现。

如下例所示,我们可以认为说明部分是一个可选接口,而包体是一个"黑盒"。我们可以调试、增强或替换一个包体而不同改变接口(包说明)。

我们可以从SQLPlus中使用CREATE PACKAGE语句来创建一个包。语法如下:

CREATE [OR REPLACE] PACKAGE package_name

[AUTHID {CURRENT_USER | DEFINER}]

{IS | AS}

[PRAGMA SERIALLY_REUSABLE;]

[collection_type_definition ]

[record_type_definition ]

[subtype_definition ]

[collection_declaration ]

[constant_declaration ]

[exception_declaration ]

[object_declaration ]

[record_declaration ]

[variable_declaration ]

[cursor_spec ]

[function_spec ]

[procedure_spec ]

[call_spec ]

[PRAGMA RESTRICT_REFERENCES(assertions) ]

END [package_name];

[CREATE [OR REPLACE] PACKAGE BODY package_name {IS | AS}

[PRAGMA SERIALLY_REUSABLE;]

[collection_type_definition ]

[record_type_definition ]

[subtype_definition ]

[collection_declaration ]

[constant_declaration ]

[exception_declaration ]

[object_declaration ]

[record_declaration ]

[variable_declaration ]

[cursor_body ]

[function_spec ]

[procedure_spec ]

[call_spec ]

[BEGIN

sequence_of_statements]

END [package_name];]

在说明部分声明的内容都是公有的,对应用程序是可见的。我们必须在所有的其他内容(除了用于为一个特殊的函数命名的编译指示;这样的编译指示必须跟在函数说明之后)声明之后才可以声明子程序。

包体中的内容有私有的,它实现了说明部分定义的细节内容,并且对应用程序是不可见的。紧跟着包体声明部分的是一个可选的初始化部分,它用于初始化包中的变量等。

AUTHID语句决定了是否是所有的打包子程序都按定义者权限(默认)或调用者权限执行,其中涉及到的模式对象是在定义者的模式中解析还是在调用者的模式中解析。

一个调用说明能让我们在Oracle数据词典中发布一个Java方法或外部C函数。调用说明靠把程序的名称、参数类型和返回类型映射到它们的SQL副本(SQL counterpart)中来发布程序。

1、PL/SQL包举例

在下面的例子中,我们把一个记录类型、游标和两个employment过程进行打包。要注意,过程hire_employee使用数据库序列empno_seq和函数SYSDATE分别插入到字段雇员编号和雇佣日期。

CREATE OR REPLACE PACKAGE emp_actions AS -- spec

TYPE emprectyp IS RECORD(

emp_id INT,

salary REAL

);

CURSOR desc_salary RETURN emprectyp;

PROCEDURE hire_employee(

ename VARCHAR2,

job VARCHAR2,

mgr NUMBER,

sal NUMBER,

comm NUMBER,

deptno NUMBER

);

PROCEDURE fire_employee(emp_id NUMBER);

END emp_actions;

CREATE OR REPLACE PACKAGE BODY emp_actions AS -- body

CURSOR desc_salary RETURN emprectyp IS

SELECT empno, sal

FROM emp

ORDER BY sal DESC;

PROCEDURE hire_employee(

ename VARCHAR2,

job VARCHAR2,

mgr NUMBER,

sal NUMBER,

comm NUMBER,

deptno NUMBER

) IS

BEGIN

INSERT INTO emp

VALUES (empno_seqNEXTVAL,

ename,

job,

mgr,

SYSDATE,

sal,

comm,

deptno);

END hire_employee;

PROCEDURE fire_employee(emp_id NUMBER) IS

BEGIN

DELETE FROM emp

WHERE empno = emp_id;

END fire_employee;

END emp_actions;

只有在包说明部分的声明内容对应用程序才是可见可访问的;包体的详细实现是不可见不可访问的。所以,我们可以在不重新编译调用程序的前提下修改包体(实现)。

二、PL/SQL包的优点

包提供了几个优点:模块化、方便应用程序设计、信息隐藏、附加功能和良好的性能。

模块化

包能让我们把逻辑相关的类型、常量、变量、异常和子程序等放到一个命名的PL/SQL模块中。每一个包都容易理解,包与包之间接口简单、清晰。这将有助于程序开发。

轻松的程序设计

设计应用程序时,我们首先要确定的是包说明中的接口信息。我们可以在没有包体的条件下编写并编译说明部分。然后引用该包的存储子程序也会被编译。在完成整个应用程序之前,我们是不需要完全实现包体部分的。

信息隐藏

有了包,我们就可以指定哪些类型、常量、变量、异常和子程序等是公有(可见和可访问)或私有(隐藏和不可访问)。例如,如果一个包里包含了四个子程序,其中三个是公有的一个是私有的。包就会隐藏私有子程序的实现,这样的话,如果实现内容发生改变,受到影响的只有包本身(不是我们的应用程序)。同样,对用户隐藏实现细节也能保证包的完整性。

附加功能

打包公有变量和游标在一个会话期会一直存在。所以,它们可以被当前环境下的所有子程序共享。并且它们允许我们跨事务来维护数据而不用把它保存在数据库中。

良好的性能

在我们首次调用打包子程序时,整个包就会被加载到内存中。所以,以后调用包中的相关子程序时,就不需要再次读取磁盘了。包能阻塞级联依赖,这样就能避免不必要的编译。例如,如果我们改变打包函数的实现,Oracle不需要重新编译调用子程序,因为它们并不依赖于包体。

三、理解包说明

包说明包括了公有声明。这些声明的作用于对于数据库模式来说是本地的,对于包来说是全局的。所以,被声明的内容可以从应用程序中和包的任何地方访问。下图演示了包的作用范围:

说明中列出了包中对应用程序所有可用的资源。例如,下面的声明演示了一个接受INTEGER类型的参数并返回一个INTEGER结果的函数fac:

FUNCTION fac (n INTEGER) RETURN INTEGER; -- returns n!

这些就是我们要调用的函数的所有信息。我们并不需要考虑它的实现细节(如,是使用迭代还是递归)。

只有子程序和游标有实现部分。所以,如果一个说明只有类型、常量、变量、异常的声明和调用说明,那么包体就没有必要的了。下面就是一个没有包体的包:

CREATE PACKAGE trans_data AS -- bodiless package

TYPE timerec IS RECORD(

minutes SMALLINT,

hours SMALLINT

);

TYPE transrec IS RECORD(

CATEGORY VARCHAR2,

ACCOUNT INT,

amount REAL,

time_of timerec

);

minimum_balance CONSTANT REAL := 1000;

number_processed INT;

insufficient_funds EXCEPTION;

END trans_data;

包trans_data不需要包体,因为类型、常量、变量和异常并没有实现部分。这样的包能让我们定义全局变量,可供子程序和数据库触发器使用。

1、引用包的内容

如果要引用包内声明的类型、常量、变量、异常和子程序等,就得使用点标识:

package_nametype_name

package_nameitem_name

package_namesubprogram_name

package_namecall_spec_name

我们可以从数据库触发器、存储子程序、3GL(第三代程序语言)应用程序和各种Oracle工具中引用包中的内容。例如,我们可以从SQLPlus中调用过程hire_employee:

SQL> CALL emp_actionshire_employee('TATE', 'CLERK', );

下例中,我们可以从一个嵌入到ProC的匿名PL/SQL块调用同样的过程。实参emp_name和job_title是主变量(即声明在主环境中的变量)。

EXEC SQL EXECUTE

BEGIN

emp_actionshire_employee(:emp_name, :job_title, );

约束

我们不能直接或间接地引用远程打包变量。例如,我们不能远程调用下面的过程,因为它在参数初始化子句中引用了打包变量:

CREATE PACKAGE random AS

seed NUMBER;

PROCEDURE initialize (starter IN NUMBER := seed, );

同样,我们也不能在包的内部引用主变量。

^ ^希望对你有帮助

TP31的解决方法就是如楼上所说,需要实例化mong数据库的模型。

so 有两种方式:

直接在使用的方法内实例化MongoModel类;

写一个model专门继承MongoModel,把需要连mongo的 *** 作或方法都丢里面去,然后在需要的页面中D()一下这个model中的某一方法即可

如下图代码:

数据库 触发器有什么用

触发器

触发器的定义就是说某个条件成立的时候,你触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。

然后,触发器的触发条件其实在你定义的时候就已经设定好的了。这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。

具体举例:

1 在一个表中定义的语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的 *** 作过程。这个就是删除表的 *** 作就是触发器执行的条件了。

2 在一个表中定义了行级的触发器,那当这个表中一行数据发生变化的时候,比如删除了一行记录,那触发器也会被自动执行了。

触发器简介:

触发器是一种特殊类型的过程。与普通过程不同的是,过程需要用户显式地调用才执行,而触发器则是当某些事件发生时,由Oracle自动执行。

触发器主要由如下几个部分组成:

触发事件:

触发条件:

触发对象:

触发 *** 作:

编写触发器时,需要注意以下几点:

触发器不接受参数。

一个表上最多可以有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。还需要注意,各个触发器之间不能有矛盾。

在一个表上的触发器越多,对在该表上的DML *** 作性能影响就越大。

触发器最大为32KB。如果确实需要,可以先建立过程,然后在触发器中用CALL语句调用。

在DML触发器中只能使用DML语句(select,insert,update,delete)。

在系统触发器中只能包含DDL语句(create,alter,drop)。

触发器中不能包含事务控制语句(mit,rollback,savepoint)。因为触发器是触发语句的一部门,触发语句被提交或回退时,触发器也就被提交或回退了。

在触发器主体中调用的任何过程、函数都不能使用事务控制语句。

在触发器主体中不能声明任何long和blob变量。新值new、旧值old也不能指向表中的任何long和blog列

不同类型的触发器(如DML触发器、INSTEAD OF触发器、系统触发器)的语法格式和作用都有较大区别。

SQL中,触发器是什么?

1、触发器。 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的 *** 作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提) 我为什么要使用触发器?比如,这么两个表: Create Table Student( --学生表 StudentID int primary key, --学号 ) Create Table BorrowRecord( --学生借书记录表 BorrowRecord int identity(1,1), --流水号 StudentID int , --学号 BorrowDate datetime, --借出时间 ReturnDAte Datetime, --归还时间 ) 用到的功能有: 1如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 2如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 等等。 这时候可以用到触发器。对于1,创建一个Update触发器: Create Trigger truStudent On Student for Update ------------------------------------------------------- --Name:truStudent --func:更新BorrowRecord 的StudentID,与Student同步。 --Use :None --User:System --Author: 懒虫 # SapphireStudio ( chair3) --Date : 2003-4-16 --Memo : 临时写写的,给大家作个Sample。没有调试阿。 ------------------------------------------------------- As if Update(StudentID) begin Update BorrowRecord Set brStudentID=iStudentID From BorrowRecord br , Deleted d ,Inserted i Where brStudentID=dStudentID end 理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示>>

请问数据库 触发器有什么用

我就给你解释一下实际场景吧

比如你有两个表 A 和 B

A表有ID 和 NAME两列

B表有ID,PLAY,NAMEID三列,A与B没有关联

如果你想删除B表的内容,但是又同时想删除A表中AID=BNAMEID

那么你就要写两条语句

如果使用触发器

就只用写删除B表的内容语句,一旦删除内容,则触发器设定的表规则被触发,那么A表的相关内容也一起删除了

SQL中触发器有什么作用

当你对表进行了添删改查等 *** 作时,如果你需要做一些特定的业务 *** 作,就可以使用触发器。

顾名思义,触发,当你做了某种预设的 *** 作时才会执行触发器的命令

举个例子。。

假设你有个员工基础信息表,里面有员工的身份z号码,手机等基本信息。。

那么,当你换了身份z或手机,需要修改号码的时候,肯定是去修改员工的基础资料表。

假设你现在有别的地方,比如人事档案啊之类的,同样使用了员工的手机等信息。。难道你还要再去修改一次档案表么。。那么如果还有其他地方使用了呢?

而触发器就可以在这种时候做出判断,如果修改了基础表的信息,那么就同步把其他使用了基础表信息的地方也更改成最新的信息。。

大概就是这么个意思。。当然还有其他的作用

数据库中替代触发器的定义是什么 5分

(1)DML触发器:是指触发器在数据库中发生数据 *** 作语言(DML)事件时将启用。DML事件即指在表或视图中修改数据的insert、update、delete语句也。 (2)DDL触发器:是指当服务器或数据库中发生数据定义语言(DDL)事件时将启用。DDL事件即指在表或索引中

数据库中的触发器重点在什么地方

简单来讲哪就是事件触发。

比如你对数据库中的表进行了一个插删等 *** 作,你想在你即将做或者完成这个 *** 作的时候程序能自动做一点别的工作,比如你想对插入数据检查一下或者对删除后的数据总数进行一下统计。

本来哪,你可以把这个工作写在自己的程序里,就是把检查写在你插入动作之前或者把统计数目写在删除动作之后。这样的问题是:你要做插删的时候就都要写这些代码,而且很容易就遗漏了。

而触发器哪,你定义在某个 *** 作上,比如把那个检查的工作过程定义成插入的前触发器,把统计工作定义成后触发器,那么在你进行插入删除的时候,数据库那边的程序就自动的给你做了这个工作了。

主要作用哪:我感觉

一是完整性(防止自己编程的遗漏),

二是简单,

三是由数据库程序(比如Oracle)进行这项工作,而不是由你自己的程序做,效率高。

下面是人家的一些教程,其实道理是很简单的。你可以用它后面讲的几个数据库的例子,自己写一个,试试就知道了。

————————————————————————————————————————

一 触发器介绍

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中

的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的

数据控制能力。数据库触发器有以下的作用:

安全性。可以基于数据库的值使用户具有 *** 作数据库的某种权

利。

# 可以基于时间限制用户的 *** 作,例如不允许下班后和节假日

修改数据库数据。

# 可以基于数据库中的数据限制用户的 *** 作,例如不允许股票

的价格的升幅一次超过10%。

审计。可以跟踪用户对数据库的 *** 作。

# 审计用户 *** 作数据库的语句。

# 把用户对数据库的更新写入审计表。

实现复杂的数据完整性规则。

# 实现非标准的数据完整性检查和约束。触发器可产生比规则

更为复杂的限制。与规则不同,触发器可以引用列或数据库对

象。例如,触发器可回退任何企图吃进超过自己保证金的期货。

# 提供可变的缺省值。

实现复杂的非标准的数据库相关完整性规则。触发器可以对数

据库中相关的表进行连环更新。例如,在auths表author_code列上的

删除触发器可导致相应删除在其它表中的与之匹配的行。

# 在修改或删除时级联修改或删除其它表中的与之匹配的行。

# 在修改或删除时把其它表中的与之匹配的行设成NULL值。

# 在修改或删除时把其它表中的与之匹配的行级联设成缺省值。

# 触发器能够拒绝或回退那些破坏相关完整性的变化,取消试

图进行数据更新的事务。当插入一个与其主健不匹配的外部键

时,这种触发器会起作用。例如,可以在booksauthor_code

列上生成一个插入触发器,如果新值与authsauthor_code列

中的某值不匹配时,插入被回退。

同步实时地复制表中的数据。

自动计算数据值,如果数据的值达到了一定的要求,则进行特

定的处理。例如,如果公司的帐号上的资金低于5万元则立即给财务人

员发送警告数据。

ORACLE与SYBASE数据库的触发器有一定的区别,下面将分别讲述

这两种数据库触发器的作用和写法。

二 ORACLE 触发器

ORACLE产生数据库触发器的语法为>>

数据库触发器中new表和old表是什么意思?

顾名思义,new是新插入的数据,old是原来的数据

insert只会有new,代表着要插入的新记录

delete只会有old,代表着要删除的记录

update由于执行的是先删除旧的记录,再插入新的记录,因此new和old都会有,且含义与上面的相同

SQL数据库中的触发器怎么写啊?急

CREATE TRIGGER trig_stu_update ON student

FOR UPDATE

AS

begin

end;

CREATE TRIGGER trig_stu_delete O功 student

FOR DELETE

AS

begin

end;

------------------

上面是更新、删除的触发器模板,将你的代码填在beginend之间。

触发器中经常用到的inserted,deleted。

inserted里面存放了insert、update *** 作的插入值或更新后值。

deleted里存放的是update、delete *** 作的更新前值或删除值。

使用方法:

declare @no int,@sex bit,@age int;

--insert、update取新值

select @no=no,@sex=sex,@age=age from inserted;

--delete、update删除值

select @no=no,@sex=sex,@age=age from deleted;

sql的触发器是干什么的,怎么用?

触发器的主要作用是,实现由主键和外键所不能保证的复杂的参照完整性和数据一致性。

例如我们日常生活中常用的银行存储系统就应用了触发器机制:当我们在银行办理存款或是取款业务后,系统除了会记录我们的交易信息外,还会根据我们存入或取出的金额自动更新我们帐户的余额(存款 *** 作后增加帐户余额,取款 *** 作后减少帐户余额),当 *** 作中出现意外情况(如断电),系统还会回滚我们所做的 *** 作,以保证交易的完整性。

所以触发器是在对表进行插入、更新和删除 *** 作时自动执行的存储过程,同时它也具有事务的功能(整个 *** 作要么全部成功,要么全部失败)。

以上就是关于asp中关于<%call 某函数() %>的调用函数问题全部的内容,包括:asp中关于<%call 某函数() %>的调用函数问题、VFP数据库中所有的命令及文件扩展名是什么、SQL数据库的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9345258.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存