我有一个带有以下列的表:age(VARCHAR2),bothsexs(NUMBER),male(NUMBER),female(NUMBER)。我正在尝试使用存储函数编写CTAS语句,该函数将返回百分比(num1 / num2)。对于我的一生,我无法弄清楚。从本质上讲,我希望CTAS给我第二张表,其中包含age(VARCHAR2)和percent(number),其中表1 age的每条记录都被复制,并使用相应的百分比计算方法。
这是我到目前为止所拥有的。
这是我的职责。
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, "Percent Male Population") AS SELECT A.AGE, (select calculate_percent(a.MALE,a.BOTH_SEXES) from dual) "Percent Male Population" FROM arkansas2010census a;
答案 0 :(得分:2)
无需为了查看计算出的列而创建表。而是创建一个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;
查看
ALTER TABLE arkansas2010census ADD (
PCT_MALE NUMBER GENERATED ALWAYS AS ( calculate_percent(male,both_sexes) )
);
或者只是向现有表中添加VIRTUAL COLUMN
=
答案 1 :(得分:1)
您正在创建一个名为ARMalePercentage
且具有 one 列的表AGE
,该表具有主键约束,并尝试使用返回的查询填充该表>两个列A.AGE
和函数结果。
我想你想要
CREATE TABLE ARMalePercentage (AGE PRIMARY KEY, PCT_MALE)
AS SELECT A.AGE,
calculate_percent(num1=>A.MALE,num2=>A.BOTHSEXES) "Percent Male Population"
from arkansas2010census a;
您可以尝试运行语句的SELECT
部分,以查看是否返回两列。