{"componentChunkName":"component---src-templates-post-template-jsx","path":"/works/posts/2020-12-08--001","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"d2df0cb7-2cc1-54f3-9c03-ab6ad8b786b4","html":"<h3>#. 동일한 구조의 테이블 또는 다른 구조의 테이블에  select 한 내용을 insert 하는 방법</h3>\n<h4>1. select 한 내용의  전체 컬럼 insert</h4>\n<ul>\n<li>\n<p>select 테이블과 insert할 테이블의 구조가 일치해야 한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">INSERT</span> <span class=\"token keyword\">INTO</span> <span class=\"token punctuation\">[</span><span class=\"token keyword\">table</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">SELECT</span> <span class=\"token operator\">*</span> <span class=\"token keyword\">FROM</span> <span class=\"token punctuation\">[</span><span class=\"token keyword\">table</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">WHERE</span> <span class=\"token punctuation\">[</span>조건<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n</li>\n</ul>\n<h4>2. 원하는 컬럼만  select 해서 insert</h4>\n<ul>\n<li>\n<p>특정 컬럼을 직접 선택해서 insert하는 방법</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">INSERT</span> <span class=\"token keyword\">INTO</span> <span class=\"token punctuation\">[</span><span class=\"token keyword\">table</span><span class=\"token punctuation\">]</span> <span class=\"token punctuation\">(</span>column1<span class=\"token punctuation\">,</span> colum2<span class=\"token punctuation\">,</span> colum3<span class=\"token punctuation\">)</span> \n<span class=\"token keyword\">SELECT</span> column1<span class=\"token punctuation\">,</span> colum2<span class=\"token punctuation\">,</span> colum3 <span class=\"token keyword\">FROM</span> <span class=\"token punctuation\">[</span><span class=\"token keyword\">table</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">WHERE</span> <span class=\"token punctuation\">[</span>조건<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n</ul>\n<br>\n<br>\n<h3>#. 조건에 따라 값을 지정해주는 Case 문</h3>\n<h4>1. 여러 조건 비교</h4>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token comment\">//Case</span>\n<span class=\"token comment\">//    WHEN 조건1 THEN 출력1 </span>\n<span class=\"token comment\">//    WHEN 조건2 THEN 출력2</span>\n<span class=\"token comment\">//    ELSE 출력3</span>\n<span class=\"token comment\">//END</span>\n\n<span class=\"token keyword\">SELECT</span> \n    <span class=\"token keyword\">case</span> \n        <span class=\"token keyword\">when</span> sal <span class=\"token operator\">>=</span><span class=\"token number\">0</span> <span class=\"token operator\">and</span> sal <span class=\"token operator\">&lt;=</span> <span class=\"token number\">1000</span> <span class=\"token keyword\">then</span> <span class=\"token string\">'E'</span>\n        <span class=\"token keyword\">when</span> sal <span class=\"token operator\">></span> <span class=\"token number\">1000</span> <span class=\"token operator\">and</span> sal <span class=\"token operator\">&lt;=</span> <span class=\"token number\">2000</span> <span class=\"token keyword\">then</span> <span class=\"token string\">'D'</span>\n        <span class=\"token keyword\">when</span> sal <span class=\"token operator\">></span> <span class=\"token number\">2000</span> <span class=\"token operator\">and</span> sal <span class=\"token operator\">&lt;=</span> <span class=\"token number\">3000</span> <span class=\"token keyword\">then</span> <span class=\"token string\">'C'</span>\n        <span class=\"token keyword\">when</span> sal <span class=\"token operator\">></span> <span class=\"token number\">3000</span> <span class=\"token operator\">and</span> sal <span class=\"token operator\">&lt;=</span> <span class=\"token number\">4000</span> <span class=\"token keyword\">then</span> <span class=\"token string\">'B'</span>\n        <span class=\"token keyword\">when</span> sal <span class=\"token operator\">></span> <span class=\"token number\">4000</span> <span class=\"token operator\">and</span> sal <span class=\"token operator\">&lt;=</span> <span class=\"token number\">5000</span> <span class=\"token keyword\">then</span> <span class=\"token string\">'A'</span>\n    <span class=\"token keyword\">end</span> <span class=\"token keyword\">as</span> sal_rank \n<span class=\"token keyword\">FROM</span> table_name<span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h4>2. 특정 컬럼의 값으로 비교</h4>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token comment\">//Case 컬럼명</span>\n<span class=\"token comment\">//    WHEN 값1 THEN 출력1 </span>\n<span class=\"token comment\">//    WHEN 값2 THEN 출력2</span>\n<span class=\"token comment\">//    ELSE 출력3</span>\n<span class=\"token comment\">//END</span>\n\n<span class=\"token keyword\">SELECT</span> \n    <span class=\"token keyword\">case</span> department\n        <span class=\"token keyword\">when</span> <span class=\"token string\">'back-end'</span> <span class=\"token keyword\">then</span> <span class=\"token string\">'BE'</span>\n        <span class=\"token keyword\">when</span> <span class=\"token string\">'front-end'</span> <span class=\"token keyword\">then</span> <span class=\"token string\">'FE'</span>\n        <span class=\"token keyword\">when</span> <span class=\"token string\">'user-interface'</span> <span class=\"token keyword\">then</span> <span class=\"token string\">'UI'</span>\n        <span class=\"token keyword\">else</span> <span class=\"token string\">'ETC'</span>\n    <span class=\"token keyword\">end</span> <span class=\"token keyword\">as</span> department_alias \n<span class=\"token keyword\">FROM</span> table_name<span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<br>\n<h3>#. 작업내용</h3>\n<p>변경사항이 없는 테이블의 경우 </p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">insert</span> <span class=\"token keyword\">into</span> autocrypt_v2g_prod<span class=\"token punctuation\">.</span>table_name \n<span class=\"token keyword\">select</span> <span class=\"token operator\">*</span> <span class=\"token keyword\">from</span> autocrypt_v2g_1208<span class=\"token punctuation\">.</span>table_name <span class=\"token keyword\">order</span> <span class=\"token keyword\">by</span> created\n<span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<p>CA_CERT 테이블 Migration</p>\n<ul>\n<li>컬럼에 변경사항이 있는 경우, 각 컬럼을 명시</li>\n<li>case 문으로 타입이 변경 된 컬럼 해결</li>\n<li>bulk insert 가 되므로 한 row가 insert 될때마다 commit이 되지 않으므로 자신 테이블의 id를 참조하는 issuer_id는 NULL로 insert/commit 후 update문 실행</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">insert</span> <span class=\"token keyword\">into</span> autocrypt_v2g_prod<span class=\"token punctuation\">.</span>ca_cert\n\t<span class=\"token punctuation\">(</span>created<span class=\"token punctuation\">,</span> created_by<span class=\"token punctuation\">,</span> updated<span class=\"token punctuation\">,</span> updated_by<span class=\"token punctuation\">,</span>\n\tactor<span class=\"token punctuation\">,</span> cert<span class=\"token punctuation\">,</span> not_after<span class=\"token punctuation\">,</span> not_before<span class=\"token punctuation\">,</span> <span class=\"token keyword\">serial</span><span class=\"token punctuation\">,</span> subject_dn<span class=\"token punctuation\">,</span> ak_id<span class=\"token punctuation\">,</span> sk_id<span class=\"token punctuation\">,</span> path_length<span class=\"token punctuation\">,</span> provider_id<span class=\"token punctuation\">,</span> \n\t\n\twca_id<span class=\"token punctuation\">,</span>\n\t\n\tvalid<span class=\"token punctuation\">,</span>\n\tlast_issued<span class=\"token punctuation\">,</span>\n\t\n\tissuer_id <span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">select</span>\n\ts<span class=\"token punctuation\">.</span>created<span class=\"token punctuation\">,</span> <span class=\"token string\">''</span> <span class=\"token keyword\">as</span> created_by<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>updated<span class=\"token punctuation\">,</span> <span class=\"token string\">''</span> <span class=\"token keyword\">as</span> updated_by<span class=\"token punctuation\">,</span>\n\ts<span class=\"token punctuation\">.</span>actor<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>cert<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>not_after<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>not_before<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span><span class=\"token keyword\">serial</span><span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>subject_dn<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>ak_id<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>sk_id<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>path_length<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">.</span>provider_id<span class=\"token punctuation\">,</span>\n\t\n    s<span class=\"token punctuation\">.</span>id <span class=\"token keyword\">as</span> wca_id<span class=\"token punctuation\">,</span>\n\t\n\t<span class=\"token keyword\">case</span> s<span class=\"token punctuation\">.</span><span class=\"token keyword\">status</span> <span class=\"token keyword\">when</span> <span class=\"token string\">'VALID'</span> <span class=\"token keyword\">then</span> <span class=\"token boolean\">true</span> <span class=\"token keyword\">else</span> <span class=\"token boolean\">false</span> <span class=\"token keyword\">end</span> <span class=\"token keyword\">as</span> valid <span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">case</span> s<span class=\"token punctuation\">.</span>last_issued <span class=\"token keyword\">when</span> <span class=\"token string\">'1'</span> <span class=\"token keyword\">then</span> <span class=\"token boolean\">true</span> <span class=\"token keyword\">else</span> <span class=\"token boolean\">false</span> <span class=\"token keyword\">end</span> <span class=\"token keyword\">as</span> last_issued<span class=\"token punctuation\">,</span>\t\n\t\n    <span class=\"token boolean\">NULL</span> <span class=\"token keyword\">as</span> issuer_id\n<span class=\"token keyword\">from</span> autocrypt_v2g_1208<span class=\"token punctuation\">.</span>ca_cert s <span class=\"token keyword\">order</span> <span class=\"token keyword\">by</span> s<span class=\"token punctuation\">.</span>created\n<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">update</span> \nautocrypt_v2g_prod<span class=\"token punctuation\">.</span>ca_cert target<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">(</span><span class=\"token keyword\">select</span>\n\ts<span class=\"token punctuation\">.</span>id <span class=\"token keyword\">as</span> id<span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">(</span><span class=\"token keyword\">select</span> t<span class=\"token punctuation\">.</span>id <span class=\"token keyword\">from</span> autocrypt_v2g_prod<span class=\"token punctuation\">.</span>ca_cert t <span class=\"token keyword\">where</span> t<span class=\"token punctuation\">.</span>wca_id <span class=\"token operator\">=</span> s<span class=\"token punctuation\">.</span>issuer_id<span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> issuer_id\n<span class=\"token keyword\">from</span> autocrypt_v2g_1208<span class=\"token punctuation\">.</span>ca_cert s <span class=\"token keyword\">order</span> <span class=\"token keyword\">by</span> s<span class=\"token punctuation\">.</span>created<span class=\"token punctuation\">)</span> result\n<span class=\"token keyword\">set</span> target<span class=\"token punctuation\">.</span>issuer_id <span class=\"token operator\">=</span> result<span class=\"token punctuation\">.</span>issuer_id\n<span class=\"token keyword\">where</span> target<span class=\"token punctuation\">.</span>wca_id <span class=\"token operator\">=</span> result<span class=\"token punctuation\">.</span>id\n<span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<p>값이 잘못 들어 갔을 경우 id의 sequence 까지 (autoincrement) 초기화 하기 위해 truncate문 사용</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">truncate</span> autocrypt_v2g_prod<span class=\"token punctuation\">.</span>tableName<span class=\"token punctuation\">;</span></code></pre></div>","fields":{"tagSlugs":["/tags/작업로그/","/tags/db-migration/"],"slug":"/works/posts/2020-12-08--001"},"frontmatter":{"title":"[작업로그] DB Data Migration","tags":["작업로그","db migration"],"date":"2020-12-08","description":""}}},"pageContext":{"slug":"/works/posts/2020-12-08--001"}},"staticQueryHashes":[]}