我有一个包含以下列的表:年龄(VARCHAR2)、男女(NUMBER)、男性(NUMBER)、女性(NUMBER)。我正在尝试使用将返回百分比 (num1/num2) 的存储函数编写 CTAS 语句。对于我的一生,我无法弄清楚这一点。本质上,我希望 CTAS 为我提供第二个包含年龄(VARCHAR2)和百分比(数字)的表,并使用适当的百分比计算来复制表 1 年龄中的每条记录。
这就是我到目前为止所拥有的。
这是我的函数。
CREATE OR REPLACE FUNCTION CALCULATE_PERCENT(NUM1 IN NUMBER,NUM2 IN NUMBER)
RETURN NUMBER
IS TOTAL NUMBER;
BEGIN
SELECT (NUM1/NUM2) INTO TOTAL FROM DUAL;
RETURN TOTAL;
END;
这是迄今为止我的 CTAS。
CREATE TABLE ARMalePercentage (AGE PRIMARY KEY)
AS SELECT A.AGE, calculate_percent(num1=>A.MALE,num2=>A.BOTHSEXES)
"Percent Male Population" from arkansas2010census a;
我是 SQL 新手,不知道我做错了什么,所以感谢您的帮助。
解决方案:
CREATE TABLE ARMalePercentage (AGE PRIMARY KEY, "男性人口百分比") AS SELECT A.AGE, (从对偶中选择计算百分比(a.MALE,a.BOTH_SEXES)) "男性人口百分比"FROM arkansas2010census a;
最佳答案
无需创建表来查看计算列。而是创建一个VIEW
。
你的函数可以简化。
CREATE OR REPLACE FUNCTION calculate_percent (
num1 IN NUMBER,
num2 IN NUMBER
) RETURN NUMBER DETERMINISTIC --marks a function that returns predictable results
IS
BEGIN
RETURN ROUND( ( num1 / num2 ) * 100.00,2); --Optional rounding to 2 decimal places
END;
/
查看
CREATE OR REPLACE VIEW armalepercentage AS
SELECT a.age,
calculate_percent(a.male,a.bothsexes) AS "Percent Male Population"
FROM arkansas2010census a;
或者简单地添加 VIRTUAL COLUMN
到现有表
ALTER TABLE arkansas2010census ADD (
PCT_MALE NUMBER GENERATED ALWAYS AS ( calculate_percent(male,both_sexes) )
);
关于sql - CTAS 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53201349/