프로 시저에 문제가 있습니다. 우리는 2 개의 테이블을 가지고 있습니다 : 회사와 typeofcompanies. 회사에는 3 개의 열 ("companyid", "companyname", "typeofcompany")이 있고 typeofcompanies에는 2 개의 열 ("typeofcompanyId", "typeofcompany")이 있습니다. 우리는 우리가 그것을 만들어야합니다 typeofcompany하지 않은 경우pl pgSQL 프로 시저를 사용하여 값을 삽입 할 수 없습니다.
CREATE OR REPLACE FUNCTION insert_to_companies(c_name VARCHAR(255),toc INTEGER)
RETURNS VOID AS $$
DECLARE i integer;
BEGIN
FOR i IN SELECT "typeofcompanyId" FROM typeofcompanies LOOP
IF toc = i THEN insert into public.companies(companyname, typeofcompany) VALUES (c_name,toc);
END IF;
END LOOP;
IF(SELECT companyname FROM companies WHERE companyname = c_name) = NULL THEN insert into public.typeofcompanies(typeofcompany) VALUES (toc);
INSERT into public.companies(companyname,typeofcompany) VALUES (c_name,toc);
END IF;
END;
$$ LANGUAGE plpgsql VOLATILE;
그래서 :
이 기업에 삽입 값에 대한 내 코드입니다. 하지만 내가 select insert_to_companies ("1", 5); 나는 오류 : 열 "1"이 존재하지 않습니다. 그래서 나는 그것이 매우 쉬운 문제라고 생각한다. 그러나 나는 3 시간 이상을 보내고 문제를 발견 할 수 없다. 나는
코드 liquibase로
회사를 테이블을 만드는 .... 도움이 필요하세요 :
<databaseChangeLog xmlns = "http://www.liquibase.org/xml/ns/dbchangelog/1.9" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
<changeSet id="1" author="[email protected]" runOnChange="true" >
<createTable tableName ="companies">
<column autoIncrement = "true" name = "companyid" type ="BIGINT">
<constraints primaryKey ="true"></constraints>
</column>
<column name="companyname" type="VARCHAR(255)">
</column>
<column name="typeofcompany" type="INTEGER">
</column>
</createTable>
</changeSet>
</databaseChangeLog>
회사의 유형에 대해 :
<databaseChangeLog xmlns = "http://www.liquibase.org/xml/ns/dbchangelog/1.9" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd" >
<changeSet id="5" author="[email protected]" runOnChange="true" >
<createTable tableName ="typeofcompanies">
<column autoIncrement = "true" name = "typeofcompanyId" type ="BIGINT">
<constraints nullable="false" primaryKey="true"></constraints>
</column>
<column name = "typeofcompany" type="VARCHAR(255)">
<constraints nullable="false"></constraints>
</column>
</createTable>
</changeSet>
</databaseChangeLog>
최소 요구 사항 이런 종류의 질문을 위해 : 테이블 정의 ('CREATE TABLE' 문 sh 데이터 유형 및 제약 조건) 및 사용중인 버전의 Postgres가 포함되어 있습니다. 열을 나열하는 것만으로는별로 유용하지 않습니다. –
Okey 미안, 내가 liquibase와 테이블을 작성해야합니다, 그래서이 liquibase 코드입니다 : –
Liquibase이 질문에 무관합니다. SQL 코드를 보여주십시오. 그리고 아직도 당신의 Postgres 버전을 볼 수 없습니다. ('SELECT version()')'c_id + "_ type"이 어디서오고, 무엇을해야하는지 명확히하라. –