大家都来看,高分100,抢答(长知识,长智力),.

merry_prince 2001-05-14 07:30:00
我要做一个报表,这里要用到数据库的VIEW,但有一点,我要将条件传到VIEW中,我想这样做,在数据库中建好VIEW,把条件做成FUNCTION或PROCEDURE,在DELPHI中为他们赋值,然后VIEW从ORACLE中读取它的条件.
这只是我的想法,但具体的ORACLE过程或函数如何编写,还要请教大家:
我写一个实例,请大家参考:
CREATE VIEW MAN AS
SELECT STUDENT_ID, AGE
FROM STU_INFO
WHERE HIGH=>178
AND AGE=>12

在实例中的178,12要像我描述的那样,可以在DELPHI赋值,在ORACLE中直接调用.
(不是答对才给分,好建议者也可给分,那位高手如果有更好的方法,那更好!)
...全文
173 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
merry_prince 2001-05-17
  • 打赏
  • 举报
回复
kingsong(牛大锅) 
还有一点我想问.我有一个想法.在你的PROCEDURE中,每次执行它,他都要重新创建一遍VIEW,所以我想,能不能这样:
CREATE VIEW MAN AS
SELECT STUDENT_ID, AGE
FROM STU_INFO
WHERE HIGH=>VARIABLE1
AND AGE=>VARIABLE2

这个VIEW只被创建一遍,VARIABLE1和VARIABLE2可以动态的从外部传递条件,如二者可是FUNCTION.在DELPHI中给二者赋值.VIEW便可读到了.你认为可行吗?
ameng007 2001-05-17
  • 打赏
  • 举报
回复
merry_prince(一寒)和kingsong(牛大锅):你们一个谈oracle一个谈sql server,好象扯不到一块去了,其实在ORACLE中存贮过程是不能返回结果集的,所以用存贮过程好象行不通,而且ORACLE中也没有象
set @aa = "Create View t_view1 As select * from table1 where age >="+@in_param
execute sp_executesql @aa
这样的动态SQL。

建议merry_prince(一寒)建立一个参数表,建VIEW时将参数表关联上,如:
CREATE VIEW MAN AS
SELECT STUDENT_ID, AGE
FROM STU_INFO,PARAM_TABLE P -- 参数表)
WHERE HIGH=>P.HIGH
AND AGE=>P.AGE

在调用VIEW之前先更新参数表PARAM_TABLE的HIGH、AGE字段值。

kingsong 2001-05-17
  • 打赏
  • 举报
回复
我也想过这么做,但好像不行。
愿听其他高见。
你有没有想过不创立视图而用嵌套select选出结果集来吗?
我以前创立view的原因是select sum()...group by ,对一个结果集合从若干个表中取得数据,而每一张表都要sum(),group by。
kingsong 2001-05-16
  • 打赏
  • 举报
回复
呵呵,甲骨文俺不懂。
不过,delphi的调用应该是一样的。
merry_prince 2001-05-16
  • 打赏
  • 举报
回复
不好意思再问一句 ,可否将它转化成ORACLE的PROCEDURE?
kingsong 2001-05-16
  • 打赏
  • 举报
回复
上面调用的过程是这么定义的:
CREATE PROCEDURE pr_ydkctz @age integer,@rval integer output
kingsong 2001-05-16
  • 打赏
  • 举报
回复
我是在SQLServer7里做的,它好像没有Create or Replace。还有那些语句我是把view的script拷贝过来的,因此它是这样写的。我想第一个条件是判断object的名字是否t_view1,第二个条件是判断object是否是view,那个N'是什么意思,不大清楚。总之你创立视图的语句用系统自动产生的script总没错。(俺也是SQLServer入门者,呵呵)
delphi里放个StoredProc控件,这样写
with PR_ydkctz do
begin
parambyname('@age').asinteger := strtoint(trim(Eage.Text));
ExecProc;
GetResults;
if parambyname('@rval').AsInteger <> 0 then
begin
application.MessageBox(出错信息......);
end;
close;
end;
merry_prince 2001-05-16
  • 打赏
  • 举报
回复
好让我一试!
merry_prince 2001-05-15
  • 打赏
  • 举报
回复
kingsong(牛大锅) ,大哥,令我仰慕,你的IF是为了判断PROCEDURE是否存在,如存在,则删除,那为什么不用CREATE OR REPLACE,来生成VIEW.

还有请具体解释一下object_id(N'[dbo].[t_view1]') and OBJECTPROPERTY(id, N'IsView') = 1)的含义.

我认为你的方法及其可行,但我想问,如何在的DELPHI中给PRECEDURE传参,请赐教.
merry_prince 2001-05-15
  • 打赏
  • 举报
回复
tantongs(探问量) ,谢谢你的帮助,我真的很感动.谢谢,希望我也能帮助你.
菩提小树 2001-05-15
  • 打赏
  • 举报
回复
先给分,再告诉你!
airhorse 2001-05-15
  • 打赏
  • 举报
回复
关注
Springer 2001-05-15
  • 打赏
  • 举报
回复
呵呵,问我吧。
用DELPHI中的TQUERY。
put a TQuery control on data moudle .
//* declaration
myQuery : TQuery;
//* implementation
myQuery.SQL := 'select * from table_name '+
' where column_name >= :param1'+
' and column_name <= :param2';
myQuery.ParamByName('param1').asstring := value1;
myQuery.ParamByName('param2').asstring := value2;
myQuery.Open; //* here should be a exception handle
//* no need to use stored procedure , it is too complicated

呵呵,我想我水平够臭。高手快笑。
kingsong 2001-05-15
  • 打赏
  • 举报
回复
sry,有点错
SQL7里:
CREATE PROCEDURE pr_test @in_param char(10)
AS

declare @aa nvarchar(300)

if exists (select * from sysobjects where id = object_id(N'[dbo].[t_view1]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[t_view1]

set @aa = "Create View t_view1 As select * from table1 where age >="+@in_param

execute sp_executesql @aa
kingsong 2001-05-15
  • 打赏
  • 举报
回复
SQL7里:
CREATE PROCEDURE pr_test @in_param char(10)
AS

declare @aa nvarchar(300)

if exists (select * from sysobjects where id = object_id(N'[dbo].[t_view1]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_temp_jxc3]

set @aa = "Create View t_view1 As select * from table1 where age >="+@in_param

execute sp_executesql @aa
kingsong 2001-05-15
  • 打赏
  • 举报
回复
用存储过程,在存储过程里建view,参数传给存储过程。
merry_prince 2001-05-15
  • 打赏
  • 举报
回复
难道真没有人懂,可叹!
神奇的肚肚 2001-05-14
  • 打赏
  • 举报
回复
真接用存储过程不可以吗
给它两个参数,
用存储过程控件调用

merry_prince 2001-05-14
  • 打赏
  • 举报
回复
OH,没人哎!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧