gpt4 book ai didi

oracle - PL/SQL : re-write SELECT statement using IN parameter in stored procedure

转载 作者:行者123 更新时间:2023-12-01 14:35:39 26 4
gpt4 key购买 nike

假设我有一个包含下表的 Oracle 11.2 数据库:

TABLE: SURVEY

PARAMETER MALE FEMALE
--------------------------
SAMPLE_SIZE 102 95
AVG_WEIGHT 170 120
AVG_HEIGHT 5.9 5.4

这是一个最小的 PL/SQL 存储过程示例,它选择男性的平均体重并将其(例如 170)放入变量 v_stat

PROCEDURE get_stat (gender IN VARCHAR2) 
AS
v_stat number;
BEGIN
SELECT male INTO v_stat FROM survey WHERE parameter = 'avg_weight';
END get_stat;

注意 IN 参数 gender 在这里没有做任何事情。我想要的是传入变量 gender,它可能等于“男性”或“女性”,并在 SELECT 语句中以某种方式使用 gender(而不是“男性” ).目标是将 gender 作为可用于返回的变量传递,例如,由 gender 定义的男性或女性的平均体重。

我知道我可能可以将 IF/THEN/ELSE 语句与两个单独的 SELECT 语句一起使用,但我想知道是否有一种优雅的方法可以通过将上述 SELECT 语句中的“男性”更改为其他内容来仅使用一个 SELECT 语句?

请注意,这是我之前问题的重做

How to programmatically set table name in PL/SQL?

这被(正确地)批评为不是一个现实的问题。

最佳答案

您需要使用其他问题中建议的相同动态 SQL 方法

PROCEDURE get_stat (gender IN VARCHAR2) 
AS
v_sql varchar2(1000);
v_param varchar2(100) := 'AVG_WEIGHT';
v_stat number;
BEGIN
v_sql := 'SELECT ' || gender || ' FROM survey WHERE parameter = :1';
EXECUTE IMMEDIATE v_sql
INTO v_stat
USING v_param;
END get_stat;

但是您会遇到与您之前的问题中提出的相同的普遍反对意见——数据模型存在根本性缺陷。为 MALEFEMALE 调查结果单独一行,而不是为 malefemale< 单独列,这样会更好 结果。

关于oracle - PL/SQL : re-write SELECT statement using IN parameter in stored procedure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9959799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com